簡體   English   中英

c# 中的顯式和隱式接口實現有什么區別

[英]what is the difference between explicit and implicit interface implementation in c#

c#/asp.net中的顯式接口和隱式接口實現有什么區別? 在哪種情況下我們可以使用顯式接口和隱式接口實現。

謝謝,

普拉迪普

隱式和顯式實現背后的概念相當簡單:

  • 可以通過接口以及實現它的 class 訪問具有隱式實現的成員
  • 具有顯式實現的成員只能通過接口訪問

至於為什么以及何時使用一種或另一種,這取決於。 如果您使用相同的屬性/方法實現多個接口,則顯式實現是您唯一的選擇,因為它是了解您打算調用哪個屬性/方法的唯一方法。 顯然,在這種情況下,您不能在 class 本身上擁有該屬性/方法:如果有,它將僅是 class,並且不會匹配任何接口(將有其顯式實現)。

在其他情況下,這實際上取決於您的設計選擇以及您要完成的工作。 如果要強制調用者僅通過接口訪問接口成員,而不是通過 class 聲明,請執行顯式實現。

假設您有兩個接口IDoStuff<T>IDoStuff ,您的 class 實現了它們。 它們都有一個方法“GetStuff”,但一個具有簽名T GetStuff() ,另一個具有簽名object GetStuff()

問題是 .net 不會讓您擁有兩個名稱相同但返回類型不同的方法。 但是您需要在 class 中同時擁有這兩種方法才能滿足這兩個接口。 如果T實際上是一個object ,那么您可以像這樣使用顯式實現。

public T GetStuff()
{
  T stuff;
  //Stuff Is Got
  return stuff;
}

IDoStuff.GetStuff()
{
  return (object)GetStuff();
}

請注意,由於IDoStuff強制要求GetStuff的安全要求,因此IDoStuff.GetStuff將基於該接口的聲明是public/private/protected/internal的。

如果你願意,你可以顯式地進行每一次植入,但是每個方法的完整方法名都是InterfaceName.MethodName ,讀和寫起來有點煩人。 通常這僅在您想多次實現具有相同簽名的方法以滿足多個接口時使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM