这是我正在尝试做的事情:
顶部是一个界面:
interface IHasPosition
{
Position Position
{
get;
}
}
接下来,我们有一个抽象类:
abstract class Person : IHasPosition
{
public abstract Position Position
{
get;
}
}
最后,我扩展了 Person:
class Instructor : Person
{
public override Position Position
{
get { return new Position(1, 1); }
}
}
这编译得很好。但是,我似乎无法明确定义属性 Position。像这样:
class Instructor : Person
{
public override Position IHasPosition.Position
{
get { return new Position(1, 1); }
}
}
编译失败:
Error 1 'ConsoleApplication3.Instructor.IHasPosition.Position': virtual or abstract members cannot be private
Error 3 The modifier 'override' is not valid for this item
Error 2 The modifier 'public' is not valid for this item
最佳答案
Instructor
继承了 Person
并且 Instructor.Position
覆盖了 Person.Position
。
因为 Person.Position
已经实现了 IHasPosition.Postion
,所以 Instructor.Position
也实现了。
Instructor
是一个 Person
是一个 IHasPosition
。
Instrcutor
接口(interface)IHasPosition.Position
的显式实现是不必要的,并且会产生误导。
假设您明确实现了已继承的接口(interface)。在覆盖上它是多余的,并且是非法的,因为它的 public
,在另一个成员上它会产生歧义。
关于c# - C#中通过抽象类显式实现属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19182356/