2010-06-14 62 views
2

我有一個實現接口的函數。這樣的事情:接口函數C#

string IMyInterface.MyFunction() 
{ 
    do something; 
} 

此功能可在我的班級以外使用。所有工作都很完美 現在我還需要從另一個LOCAL非公共函數調用此函數。像這樣:

void Func2() 
{ 
    string s; 
    s = MyFunction(); 
} 

問題是,我得到這個錯誤:

任何幫助將不勝感激「這個名字的MyFunction不會在目前情況下局部存在」。

TY。

回答

7

您已經明確實現了接口方法。 投 「這個」 的界面,並且你在那裏:

void Func2() 
{ 
    string s = ((IMyInterface)this).MyFunction(); 
} 
+5

或隱含地實現該功能。 – SLaks 2010-06-14 15:16:21

+0

工作完美。 TY。 – 2010-06-14 15:27:20

4

這是explicitly implemented。您只能從IMyInterface類型的參考中調用它。要在內部調用它,您需要投射this

s = ((IMyInterface)this).MyFunction(); 

考慮隱式實現它,顯式實現是棘手的,你需要一個很好的理由來使用它。

+0

我刪除了多餘的答案後,我看到了您的評論。 (有關記錄,我同意。) – 2010-06-14 15:18:31

+0

如果你問我,顯式實現是C#的美麗之一。有時候我真的很想念。對接口進行轉換可能是編寫自我解釋代碼的一種非常明確的方式。取決於你的接口是什麼等等。 – Krumelur 2010-06-14 15:23:26

+0

工作完美。 TY。 – 2010-06-14 15:27:45

2

正如其他海報所提到的,您已經明確實現了接口。另一種選擇是實現它,像這樣:

string MyFunction() 
{ 
    do something; 
} 

以我的經驗,你只有明確實現一個接口時,你擔心的功能在多個接口的名稱將發生碰撞,但他們有不同的實現。

0

我經常使用下面的模式的變化具有明確的接口:

string IMyInterface.MyFunction() 
{ 
    _myPrivateFunction(); 
} 

string _myPrivateFunction() 
{ 
    //Do Stuff... 
}