(原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员
10.3? 接口的實現
在繼續前,先討論一下如何定義和實現接口。第9章介紹了接口定義的方式與類相似,使用的代碼如下:
interface IMyInterface {// Interface members. }
接口成員的定義與類成員的定義相似,但有幾個重要的區別:
不允許使用訪問修飾符(public、private、protected或internal),所有的接口成員都是公共的。?
???? 接口成員不能包含代碼體。
?? 接口不能定義字段成員。
接口成員不能用關鍵字static、virtual、abstract或sealed來定義。
類型定義成員是禁止的。
但要隱藏繼承了基接口的成員,可以用關鍵字new來定義它們,例如:
interface IMyBaseInterface {void DoSomething(); }interface IMyDerivedInterface : IMyBaseInterface {new void DoSomething(); }
其執行方式與隱藏繼承的類成員的方式一樣。
在接口中定義的屬性可以定義訪問塊 get 和 set 中的哪一個能用于該屬性(或將它們同時用于該屬性),例如:
interface IMyInterface {int MyInt( get; set; ) }
其中int屬性MyInt有get和set存取器。對于訪問級別有更嚴限制的屬性來說,可以省略它們中的任一個。
note : 這個語法類似于自動屬性,但自動屬性是為類(而不是接口)定義的,自動屬性必須包含get和set存取器。
接口沒有指定應如何存儲屬性數據。接口不能指定字段,例如用于存儲屬性數據的字段。最后,接口與類一樣,可以定義為類的成員(但不能定義為其他接口的成員,因為接口不能包含類型定義)。
?
在類中實現接口
現接口的類必須包含該接口所有成員的實現代碼,且必須匹配指定的簽名(包括匹配指定的get和set塊),并且必須是公共的。例如:
public interface IMyInterface {void DoSomething();void DoSomethingElse(); }public class MyClass : IMyInterface {public void DoSomething() {}public void DoSomethingElse() {} }
可以使用關鍵字 virtual 或 abstract 來實現接口成員,但不能使用 static 或 const。還可以在基類上實現接口成員,例如:
public interface IMyInterface {void DoSomething();void DoSomethingElse(); }public class MyBaseClass { // 注意這里的基類并沒有繼承接口public void DoSomething() {} }public class MyDerivedClass : MyBaseClass, IMyInterface {// DoSometing()接口在基類中實現public void DoSomethingElse() {} }
繼承一個實現給定接口的基類,就意味著派生類隱式地支持這個接口,例如:
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() {} }
顯然,在基類中把實現代碼定義為虛擬,派生類就可以替換該實現代碼,而不是隱藏它們。如果要使用new關鍵字隱藏一個基類成員,而不是重寫它,則方法IMyInterface.DoSomething()就總是引用基類版本,即使通過這個接口來訪問派生類,也是這樣。
?
1. 顯示實現接口成員
也可以由類顯式地實現接口成員。如果這么做,該成員就只能通過接口來訪問,不能通過類來訪問。上一節的代碼中使用的隱式成員可以通過類和接口來訪問。
例如,如果類MyClass隱式地實現接口IMyInterface的方法DoSomething(),如上所述,則下面的代碼就是有效的:
MyClass myObj = new MyClass(); myObj.DoSomething();
下面的代碼也是有效的:
MyClass myObj = new MyClass(); IMyInterface myInt = myObj; myInt.DoSomething();
另外,如果MyDerivedClass顯式實現DoSomething(),就只能使用后一種技術(只能用接口訪問)。其代碼如下:
public class MyClass : IMyInterface {void IMyInterface.DoSomething() { // 顯示實現 }public void DoSomethingElse() {} }
其中 DoSomething()是顯式實現的,而 DoSomethingElse()是隱式實現的。只有后者可以直接通過MyClass的對象實例來訪問。
?
轉載于:https://www.cnblogs.com/wodehao0808/p/4961494.html
總結
以上是生活随笔為你收集整理的(原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis 使用resultMap实
- 下一篇: 艾米