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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

生活经验

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

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

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

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

interface IMyInterface {// Interface members.
}

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

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

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

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

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

    類(lèi)型定義成員是禁止的。

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

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

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

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

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

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

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

  接口沒(méi)有指定應(yīng)如何存儲(chǔ)屬性數(shù)據(jù)。接口不能指定字段,例如用于存儲(chǔ)屬性數(shù)據(jù)的字段。最后,接口與類(lèi)一樣,可以定義為類(lèi)的成員(但不能定義為其他接口的成員,因?yàn)榻涌诓荒馨?lèi)型定義)。

?

在類(lèi)中實(shí)現(xiàn)接口

  現(xiàn)接口的類(lèi)必須包含該接口所有成員的實(shí)現(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 來(lái)實(shí)現(xiàn)接口成員,但不能使用 static 或 const。還可以在基類(lèi)上實(shí)現(xiàn)接口成員,例如:

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

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

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() {}
}

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

?

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

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

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

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

  下面的代碼也是有效的:

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

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

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

  其中 DoSomething()是顯式實(shí)現(xiàn)的,而 DoSomethingElse()是隱式實(shí)現(xiàn)的。只有后者可以直接通過(guò)MyClass的對(duì)象實(shí)例來(lái)訪問(wèn)。

?

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

總結(jié)

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

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