2011-07-11 34 views

回答

2

說你有兩個接口,IDoStuff<T>IDoStuff,你的類實現。他們都有一個方法「GetStuff」,但有一個簽名T GetStuff(),另一個有簽名object GetStuff()

問題是.net不會讓你有兩個方法命名爲相同的東西,只有返回類型不同。但是你需要在你的類中同時使用這兩種方法來滿足這兩個接口。如果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,並且讀取和寫入會有點煩人。通常這隻有在你想多次實現一個具有相同簽名的方法來滿足多個接口時纔會使用。

5

背後隱性和顯性的執行理念很簡單:

  • 與隱含執行的成員將通過接口訪問,以及通過類實現它
  • 具有明確實施的成員會通過接口只能訪問

至於爲什麼以及何時使用這個或另一個,它取決於。在使用相同屬性/方法實現多個接口的情況下,顯式實現是唯一的選擇,因爲它是知道您打算調用哪個屬性/方法的唯一方法。很明顯,在這種情況下,你不能在類本身擁有該屬性/方法:如果存在,它將只是類,並且不會匹配任何接口(這將有它們的顯式實現)。

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

相關問題