我試圖將委託指派給屬於另一個類對象的方法。將代理指向類中的方法
TestingClass testObj = new TestingClass();
Delegate myDelegate = testObj.testMethod; //syntax error
我的目的是在testObj
指向myDelegate
該方法testMethod
。上面的代碼有語法錯誤。
什麼是正確的語法在C#中做到這一點?
我試圖將委託指派給屬於另一個類對象的方法。將代理指向類中的方法
TestingClass testObj = new TestingClass();
Delegate myDelegate = testObj.testMethod; //syntax error
我的目的是在testObj
指向myDelegate
該方法testMethod
。上面的代碼有語法錯誤。
什麼是正確的語法在C#中做到這一點?
如果你使用真正的委託意向 - 這可以很方便的創建一個良好的命名類型 - 定義自己的一個:
class Program
{
delegate void D1();
static void Main(string[] args)
{
var testObj = new Program();
D1 myDelegate = testObj.TestMethod;
myDelegate.Invoke();
}
void TestMethod()
{
Console.WriteLine("Foo!");
}
}
實際上從來沒有需要定義自己的代表。你可以,也應該儘可能使用'Action'或'Func'(幾乎所有的時間)。它更快,更容易,更具可讀性。 – Servy
看看如何使用喬恩長柄水杓教程,以及建立代表它是直接和簡單易懂Delegates and Events
下面是一個簡單的例子,說明你如何使用它基於我寫了一個例子你
//Define a delegate here in your Class
public delegate void MyMessageHandler(string message);
然後,您可以使用它像這樣:
public void DoWork(MyMessageHandler callback)
{
string message = "";
....
callback(message);
}
你再這樣稱呼它:
public Main()
{
DoWork(ProcessMessages);
}
public void ProcessMessages(string message)
{
....
}
您應該將它分配給具有兼容委託類型的變量,例如,
Action myDelegate = testObj.testMethod;
委託類型取決於testMethod
的定義。
.NET [4.5]中有多達16個參數的[Action委託](http://msdn.microsoft.com/en-us/library/vstudio/system.action.aspx)定義。你會像這樣使用它們:Action
有什麼語法錯誤? testMethod的簽名是什麼? – jpmc26
http://www.akadia.com/services/dotnet_delegates_and_events.html – MethodMan
@ jpmc26 IDE僅強調第二行爲語法錯誤,不允許編譯。 – Carven