C#的顯式介面和隱式介面

來源:互聯網
上載者:User

介面的實現分為:隱式實現和顯式實現。如果類或者結構要實現的是單個介面,可以使用隱式實現,如果類或者結構繼承了多個介面那麼介面中相同名稱成員就要顯式實現。顯示實現是通過使用介面的完全限定名來實現介面成員的。

使用顯式介面成員執行體通常有兩個目的:

1、因為顯式介面成員執行體不能通過類的執行個體進行訪問,這就可以從公有介面中把介面的實現部分單獨分離開。如果一個類只在內部使用該介面,而類的使用者不會直接使用到該介面,這種顯式介面成員執行體就可以起到作用。

2、顯式介面成員執行體避免了介面成員之間因為同名而發生混淆。如果一個類希望對名稱和傳回型別相同的介面成員採用不同的實現方式,這就必須要使用到顯式介面成員執行體。如果沒有顯式介面成員執行體,那麼對於名稱和傳回型別不同的介面成員,類也無法進行實現。

example:

/// <summary>

/// IGoodbye interface

/// </summary>

public interface IGoodbye

{

void Speak();

void Bye();

}

/// <summary>

/// IHello interface

/// </summary>

public interface IHello

{

void Speak();

}

/// <summary>

/// ISay interface

/// </summary>

public interface ISay

{

void Say();

}

---------------------------------

/// <summary>

/// 隱式介面實現

/// </summary>

public class Hello : ISay, IHello

{

public Hello()

{

}

public void Say()

{

Console.WriteLine("Say Hello");

}

public void Speak()

{

Console.WriteLine("Speak Hello");

}

}

/// <summary>

/// 明確介面實作

/// </summary>

public class Speak : IHello, IGoodbye

{

public Speak()

{

}

void IHello.Speak()

{

Console.WriteLine("Hello");

}



void IGoodbye.Speak()

{

Console.WriteLine("Good Bye");

}

void IGoodbye.Bye()

{

Console.WriteLine("Bye-Bye");

}

}

-------------------------

上面的顯式實現,不能如此調用。

Speak speak = new Speak();

speak.Speak(); 這裡是不成功的。

只能這麼用: ((IHello)speak).Speak();

或者這樣調用:

Speak speak = new Speak();

speak .Speak(); //錯誤:不同的方法

IHello control = speak ;

control.Speak(); //調用 Speak的Speak方法

上述代碼中對speak.Speak()的調用是錯誤的,因為speak 本身並沒有提供這一方法。control.Speak( )是正確的調用方式。

 注釋:介面本身不提供所定義的成員的實現,它僅僅說明這些成員,這些成員必須依靠實現介面的類或其它介面的支援。

--------------

而隱式實現,就可以直接調用。

Hello hello = new Hello();

hello.Say();

hello.Speak();

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.