1

这是我想做的事情:

顶部是一个界面:

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); }
        }
    }

这编译得很好。但是,我似乎无法明确定义属性位置。像这样的东西:

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
4

2 回答 2

3

Instructor正在继承PersonInstructor.Position覆盖Person.Position

既然Person.Position已经实施了IHasPosition.Postion,那么就这样做吧Instructor.Position

Instructor是一个Person是一个IHasPosition

IHasPosition.Position接口的显式实现Instrcutor是不必要的,并且会产生误导。

让我们假设您确实显式地实现了已经被继承的接口。在覆盖上它是多余的,并且是非法的public,因为它在另一个成员上会产生歧义。

于 2013-10-04T13:35:14.720 回答
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 所说,这是一种非常糟糕的风格

于 2013-10-04T13:59:08.343 回答