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

本文关键字:实现 属性 抽象类 通过 | 更新日期: 2023-09-27 18:33:51

这是我正在尝试做的:

顶部有一个界面:

interface IHasPosition
    {
        Position Position
        {
            get;
        }
    }

接下来,我们有一个抽象类:

abstract class Person : IHasPosition
    {
        public abstract Position Position
        {
            get;
        }
    }

最后,我扩展人:

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

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

Instructor继承PersonInstructor.Position覆盖Person.Position

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

InstructorPersonIHasPosition .

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

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

代码中存在语法错误:显式接口实现不能公开。从技术上讲,你可以这样说:

   class Instructor: Person {
     // From Person abstract class
     public override Position Position 
     {
       get { return new Position(1, 1); }
     }
     // Explicit interface implementation
     Position IHasPosition.Position 
     {
       get { ... }
     }
   }

但正如乔德雷尔所说,这是一种非常糟糕的风格