日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

(原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员

發(fā)布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

10.3? 接口的實現(xiàn)

  在繼續(xù)前,先討論一下如何定義和實現(xiàn)接口。第9章介紹了接口定義的方式與類相似,使用的代碼如下:

interface IMyInterface {// Interface members.
}

  接口成員的定義與類成員的定義相似,但有幾個重要的區(qū)別:

     不允許使用訪問修飾符(public、private、protected或internal),所有的接口成員都是公共的。?

????    接口成員不能包含代碼體。

   ?? 接口不能定義字段成員。

    接口成員不能用關(guān)鍵字static、virtual、abstract或sealed來定義。

    類型定義成員是禁止的。

  但要隱藏繼承了基接口的成員,可以用關(guān)鍵字new來定義它們,例如:

interface IMyBaseInterface {void DoSomething();
}interface IMyDerivedInterface : IMyBaseInterface {new void DoSomething();
}

  其執(zhí)行方式與隱藏繼承的類成員的方式一樣。

  在接口中定義的屬性可以定義訪問塊 get 和 set 中的哪一個能用于該屬性(或?qū)⑺鼈兺瑫r用于該屬性),例如:

interface IMyInterface {int MyInt( get; set; )
}

  其中int屬性MyInt有g(shù)et和set存取器。對于訪問級別有更嚴(yán)限制的屬性來說,可以省略它們中的任一個。

  note : 這個語法類似于自動屬性,但自動屬性是為類(而不是接口)定義的,自動屬性必須包含get和set存取器。

  接口沒有指定應(yīng)如何存儲屬性數(shù)據(jù)。接口不能指定字段,例如用于存儲屬性數(shù)據(jù)的字段。最后,接口與類一樣,可以定義為類的成員(但不能定義為其他接口的成員,因為接口不能包含類型定義)。

?

在類中實現(xiàn)接口

  現(xiàn)接口的類必須包含該接口所有成員的實現(xiàn)代碼,且必須匹配指定的簽名(包括匹配指定的get和set塊),并且必須是公共的。例如:

public interface IMyInterface {void DoSomething();void DoSomethingElse();
}public class MyClass : IMyInterface {public void DoSomething() {}public void DoSomethingElse() {}
}

  可以使用關(guān)鍵字 virtual 或 abstract 來實現(xiàn)接口成員,但不能使用 static 或 const。還可以在基類上實現(xiàn)接口成員,例如:

public interface IMyInterface {void DoSomething();void DoSomethingElse();
}public class MyBaseClass {  // 注意這里的基類并沒有繼承接口public void DoSomething() {}
}public class MyDerivedClass : MyBaseClass, IMyInterface {// DoSometing()接口在基類中實現(xiàn)public void DoSomethingElse() {}
}

  繼承一個實現(xiàn)給定接口的基類,就意味著派生類隱式地支持這個接口,例如:

public interface IMyInterface {void DoSomething();void DoSomethingElse();
}public class MyBaseClass : IMyInterface {public virtual void DoSomething() {}public virtual void DoSomethingElse() {}
}public class MyDerivedClass : MyBaseClass {public override void DoSomething() {}
}

  顯然,在基類中把實現(xiàn)代碼定義為虛擬,派生類就可以替換該實現(xiàn)代碼,而不是隱藏它們。如果要使用new關(guān)鍵字隱藏一個基類成員,而不是重寫它,則方法IMyInterface.DoSomething()就總是引用基類版本,即使通過這個接口來訪問派生類,也是這樣

?

1. 顯示實現(xiàn)接口成員

  也可以由類顯式地實現(xiàn)接口成員。如果這么做,該成員就只能通過接口來訪問,不能通過類來訪問。上一節(jié)的代碼中使用的隱式成員可以通過類和接口來訪問

  例如,如果類MyClass隱式地實現(xiàn)接口IMyInterface的方法DoSomething(),如上所述,則下面的代碼就是有效的:

MyClass myObj = new MyClass();
myObj.DoSomething();

  下面的代碼也是有效的:

MyClass myObj = new MyClass();
IMyInterface myInt = myObj;
myInt.DoSomething();

  另外,如果MyDerivedClass顯式實現(xiàn)DoSomething(),就只能使用后一種技術(shù)(只能用接口訪問)。其代碼如下:

public class MyClass : IMyInterface {void IMyInterface.DoSomething() {  // 顯示實現(xiàn)
        }public void DoSomethingElse() {}
}

  其中 DoSomething()是顯式實現(xiàn)的,而 DoSomethingElse()是隱式實現(xiàn)的。只有后者可以直接通過MyClass的對象實例來訪問。

?

轉(zhuǎn)載于:https://www.cnblogs.com/wodehao0808/p/4961494.html

總結(jié)

以上是生活随笔為你收集整理的(原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。