[點晴永久免費OA]C#接口的實現(xiàn)
當(dāng)前位置:點晴教程→點晴OA辦公管理信息系統(tǒng)
→『 經(jīng)驗分享&問題答疑 』
接口的定義方式與類相似,使用的代碼如下: interface IMyInterface { //Interface member. } 接口成員的定義與類成員的定義相似,但具有幾個重要的區(qū)別: 【1】、不允許使用訪問修飾符(public、private、protected或internal),所有接口成員都是隱式公共的。 【2】、接口成員不能包含代碼體。 【3】、接口不能定義字段成員。 【4】、不能用關(guān)鍵字static、virtual、abstract或sealed來定義接口成員。 【5】、類型定義成員是禁止的。 但要隱藏從基接口中繼承的成員,可以用關(guān)鍵字new來定義它們,例如: interface IMyBaseInterface { void DoSomething(); } interface IMyDerivedInterface:IMyBaseInterface { new void DoSomething(); } 其方式與隱藏繼承的類成員的方式一樣。 在接口中定義的屬性可以定義訪問塊get和set中的哪一個能用于該屬性(或?qū)⑺鼈兺瑫r用于該屬性),例如: interface IMyInterface { int MyInt{get;set;} } 其中int屬性MyInt有g(shù)et和set存取器。對于訪問級別有更嚴(yán)格限制的屬性來說,可以省略它們中的任一個。 注意:這個語法類似于自動屬性,但自動屬性是為類(而不是接口)定義的,自動屬性必須包含get和set存取器。 接口沒有指定應(yīng)如何存儲屬性數(shù)據(jù)。接口不能指定字段,例如用于存儲屬性數(shù)據(jù)的字段。最后,接口與類一樣,可以定義為類的成員(但不能定義為其他接口的成員,因為接口不能包含類型定義)。 在類中實現(xiàn)接口 實現(xiàn)接口的類必須包含該接口所有成員的實現(xiàn)代碼,且必須匹配指定的簽名(包括匹配指定的get和set塊),并且必須是公共的。例如: public interface IMyInterface { void DoSomething(); void DoSomethingElse(); } public interface 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 { 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)接口成員。如果這么做,就只能通過接口來訪問該成員,不能通過類來訪問。隱式成員可以通過類和接口來訪問。 例如,如果類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(){} public void DoSomethingElse(){} } 其中DoSomething()是顯示實現(xiàn)的,而DoSomethingElse()是隱式實現(xiàn)的。只有后者可以直接通過MyClass的對象實例來訪問。 2、其他屬性存取器 public interface IMyInterface { int MyIntProperty{get;} } public class MyBaseClass:IMyInterface { public int MyIntProperty{get;protected set;} } 如果將新添加的存取器定義為公共的,那么能夠訪問實現(xiàn)該接口的類的代碼也可以訪問該存取器。但是,只能訪問接口的代碼就不能訪問該存取器。 該文章在 2023/4/13 8:34:02 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |