通过C#中的抽象类显式实现属性

时间:2013-10-04 13:23:52

标签: c# inheritance interface

这就是我想要做的事情:

顶部有一个界面:

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

2 个答案:

答案 0 :(得分:3)

Instructor继承PersonInstructor.Position覆盖Person.Position

由于Person.Position已经实施IHasPosition.PostionInstructor.Position也是如此。

Instructor PersonIHasPosition

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所说,这是非常糟糕的风格