这就是我想要做的事情:
顶部有一个界面:
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
答案 0 :(得分:3)
Instructor
继承Person
,Instructor.Position
覆盖Person.Position
。
由于Person.Position
已经实施IHasPosition.Postion
,Instructor.Position
也是如此。
Instructor
Person
是IHasPosition
。
在IHasPosition.Position
上明确实施接口Instrcutor
是不必要的,并且会产生误导。
让您可以明确实现已经继承的接口。在覆盖它是多余的,并且是非法的,因为它public
,在另一个成员上它产生歧义。
答案 1 :(得分:1)
您的代码中存在语法错误:显式接口实现无法公开。 从技术上讲,你可以这样说:
class Instructor: Person {
// From Person abstract class
public override Position Position
{
get { return new Position(1, 1); }
}
// Explicit interface implementation
Position IHasPosition.Position
{
get { ... }
}
}
但正如Jodrell所说,这是非常糟糕的风格。