[英]Explicit implementation of property through an abstract class in C#
這是我想要做的:
頂部是一個界面:
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
IHasPosition.Postion
如此。
Instructor
是一個Person
是IHasPosition
。
顯式接口的實現IHasPosition.Position
上Instrcutor
是unnesscessary,並會產生誤導。
讓我們可以明確地實現已經繼承的接口。 在覆蓋它是多余的,並且是非法的,因為它的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 { ... }
}
}
但正如Jodrell所說,這是一種非常糟糕的風格 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.