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

标签 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

最佳答案

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/

相关文章:

c# - 如何保护 Web API 上的 Controller 仅供本地计算机使用

C# 访问被局部属性隐藏的静态方法

java - 如何在具有一对一关系的 Hibernate 中进行继承映射?

java - 在 Android 中创建界面

c# - 禁止现有类的接口(interface)实现有什么好处吗?

c# - Autofac。如何在构造函数中注入(inject)一个开放的通用委托(delegate)

c# - 如何从我的 App_Themes 文件夹中列出可用的 Css 类?

c++ - 如何向派生类添加功能?

c++ - 为什么 x 成员变量不明确?

Java - 接口(interface)扩展自身