簡體   English   中英

通過C#中的抽象類顯式實現屬性

[英]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繼承PersonInstructor.Position重寫Person.Position

由於Person.Position已經實現了IHasPosition.Postion ,因此Instructor.Position IHasPosition.Postion如此。

Instructor是一個PersonIHasPosition

顯式接口的實現IHasPosition.PositionInstrcutor是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM