通过 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
Instructor
继承Person
,Instructor.Position
覆盖Person.Position
。
由于Person.Position
已经实现了IHasPosition.Postion
,Instructor.Position
也是如此。
Instructor
是Person
是IHasPosition
.
在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 { ... }
}
}
但正如乔德雷尔所说,这是一种非常糟糕的风格。