公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

探索C#中的接口實(shí)現(xiàn):隱式 vs. 顯式

admin
2024年2月21日 12:7 本文熱度 1029

概述:C#中的接口實(shí)現(xiàn)可以是隱式或顯式的。隱式實(shí)現(xiàn)是常見的,但顯式實(shí)現(xiàn)提供了更多控制權(quán),尤其適用于特定情況,如接口方法不想公開在類上的情況。顯式實(shí)現(xiàn)的調(diào)用需要通過接口訪問,這可以在特定需求下提供更好的靈活性和可維護(hù)性。

介紹

在 C# 中,可以隱式或顯式方式實(shí)現(xiàn)接口。在大多數(shù)情況下,我們使用的是隱式接口實(shí)現(xiàn),即您有一個(gè)具有相同接口簽名的方法。

internal interface IMyInterface
{
    void SayHello();
}
internal class ImplicitImplementation : IMyInterface
{
    public void SayHello()
     {
        Console.WriteLine("ImplicitImplementation says hello.");
    }
}

顯式接口實(shí)現(xiàn)是通過在接口方法前面加上接口名稱和句點(diǎn)來定義的。該方法只能通過指定的接口訪問。

internal class ExplicitImplementation : IMyInterface
{
    void IMyInterface.SayHello()
     {
        Console.WriteLine("ExplicitImplementation says hello.");
    }
}

請注意,該方法沒有公共訪問修飾符,因?yàn)樗荒芡ㄟ^接口訪問。

IMyInterface v1 = new ExplicitImplementation();
v1.SayHello();

何時(shí)必須使用顯式接口實(shí)現(xiàn)?

在以下情況下,必須使用顯式接口實(shí)現(xiàn):

類實(shí)現(xiàn)兩個(gè)具有相同方法簽名的接口。

internal interface IControl{    void Paint();}
internal interface ICanvas{    void Paint();}internal class MyControl : IControl, ICanvas{    void IControl.Paint()    {        Console.WriteLine("IControl.Paint()");    }    void ICanvas.Paint()    {        Console.WriteLine("ICanvas.Paint()");    }}
var control = new MyControl();((IControl)control).Paint();((ICanvas)control).Paint();

  1. 您不想在類類型上公開接口方法。您希望用戶將類型強(qiáng)制轉(zhuǎn)換為接口以訪問該方法。

internal class ExplicitImplementation : IMyInterface{    void IMyInterface.SayHello()     {        Console.WriteLine("ExplicitImplementation says hello.");    }}
// The following two lines would cause compile error// 'ExplicitImplementation' does not contain a definition for 'SayHello'ExplicitImplementation v1 = new ExplicitImplementation();v1.SayHello();
// The following lines are OKIMyInterface v1 = new ExplicitImplementation();v1.SayHello();

在上面的代碼中,SayHello() 方法無法通過對象實(shí)例訪問。您必須將其轉(zhuǎn)換為接口才能訪問它。

當(dāng)涉及繼承時(shí),事情會(huì)變得復(fù)雜。假設(shè)您的基類和子類都必須實(shí)現(xiàn)相同的接口(隱式或顯式),在不同的場景中調(diào)用哪個(gè)實(shí)現(xiàn)?有很多組合。我們在這里只討論兩種情況。

基類和子類都使用隱式接口實(shí)現(xiàn)

internal class ImplicitImplementation : IMyInterface{    public void SayHello()     {        Console.WriteLine("ImplicitImplementation says hello.");    }}internal class ImplicitImplementationSubClass : ImplicitImplementation, IMyInterface{    public void SayHello()     {        Console.WriteLine("ImplicitImplementationSubClass says hello.");    }}
ImplicitImplementation v3 = new ImplicitImplementation();v3.SayHello();
ImplicitImplementation v4 = new ImplicitImplementationSubClass();v4.SayHello();
IMyInterface v5 = new ImplicitImplementationSubClass();v5.SayHello();

// Output

ImplicitImplementation says hello. ImplicitImplementation says hello. ImplicitImplementationSubClass says hello.

這里的輸出有點(diǎn)有趣:第一個(gè)是顯而易見的。第二個(gè)和第三個(gè)值得解釋。

對于第二個(gè) (v4),運(yùn)行時(shí)調(diào)用基類 ImplicitImplementation 中的接口實(shí)現(xiàn),因?yàn)楫?dāng)基類和子類都隱式實(shí)現(xiàn)相同的接口時(shí),子類實(shí)現(xiàn)會(huì)隱藏基類實(shí)現(xiàn)。

對于第三個(gè) (v5),運(yùn)行時(shí)調(diào)用子類中的接口實(shí)現(xiàn),因?yàn)?v5 實(shí)例是從子類構(gòu)造并強(qiáng)制轉(zhuǎn)換為接口的。

基類和子類都使用顯式接口實(shí)現(xiàn)

internal class ExplicitImplementation : IMyInterface{    void IMyInterface.SayHello()     {        Console.WriteLine("ExplicitImplementation says hello.");    }}internal class ExplicitImplementationSubClass : ExplicitImplementation, IMyInterface{    void IMyInterface.SayHello()    {        Console.WriteLine("ExplicitImplementationSubClass says hello explicitly.");    }    public void SayHello()    {        Console.WriteLine("ExplicitImplementationSubClass says hello implicitly.");    }}
IMyInterface v1 = new ExplicitImplementation();v1.SayHello();
IMyInterface v2 = new ExplicitImplementationSubClass();v2.SayHello();
ExplicitImplementationSubClass v2_1 = new ExplicitImplementationSubClass();v2_1.SayHello();

/// Output

ExplicitImplementation says hello. ExplicitImplementationSubClass says hello explicitly. ExplicitImplementationSubClass says hello implicitly.

這里的輸出更清晰易懂。顯式接口實(shí)現(xiàn)只能通過接口訪問。根據(jù)強(qiáng)制轉(zhuǎn)換為接口的真實(shí)對象實(shí)例,運(yùn)行時(shí)將觸發(fā)該對象實(shí)例的接口實(shí)現(xiàn)。

您可以隱式和顯式實(shí)現(xiàn)接口。運(yùn)行時(shí)將調(diào)用正確的實(shí)現(xiàn),具體取決于您是使用接口還是類對象來調(diào)用它。第三個(gè)輸出 (v2_1) 演示了從類對象調(diào)用時(shí),運(yùn)行時(shí)將選擇隱式接口實(shí)現(xiàn)。


該文章在 2024/2/21 12:11:59 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产日韩高清制服一区 | 国产美女裸体无遮挡免费视频 | 精品无码aⅴ大香 | av色综合久久天堂av色综合 | 91久久久久精品无嫩草影院 | 91亚洲中文天堂 | 国产成人啪精品视频免费软件 | 国产精品va在线观看无码电影 | 成人午夜一区二区三 | 国产高清在线精品一区app | 国产日韩一区在线观看 | 国产精品久久久精品app | 国产成人无码精品久久久免费 | 国产av一区二 | 国产欧美成人精品 | aⅴ毛片免费观看 | 国产三级xxxxx在线观看 | 国产91无码网站在线观看 | 精品人妻系列无码人妻免费视频 | a级毛片无码久久精品免费 a级毛片无码免费久久 | 加勒比东京热久久久 | 精品国产午夜福利在线观看蜜月 | 国产精品一区二区不卡 | 国产精品国产三级在线专区 | 国产女同调教 | 国产丝袜无码一区二区视频 | 国产aⅴ视频一区二区三区 国产aⅴ熟女 | 国产日韩欧美东南亚在线 | 国产传媒一二三区av | 福利一区二区三区不卡视频 | 国产亚洲精品4区在线观看 国产亚洲精品91 | 99精品国产九九国产精品 | 国产日韩精品欧美一区灰灰 | 国产最新精品一区二区三区 | 国产成人精品综合 | 国产成人av在线免播放观看 | 国产成人综合色就色综合 | 精品人妻一区2区三区 | 国产原创顾美玲剧情在线 | 国产成人无码精品久久久小说 | 国产精品欧美一区喷水 |