Джим, я пытаюсь изучать делегатов в C # самостоятельно.
Одна проблема с вашим кодом состоит в том, что вы не назначили делегата действительному обработчику.Подпись делегата должна соответствовать действительному обработчику с такой же сигнатурой метода.
В строке:
this.MyFuncToCallFrmApp = new MyFunctionDelegate(this.MyFuncToCallFrmApp);
this.MyFuncToCallFrmApp
является делегатом, но вместо этого он должен быть корректным обработчиком метода.
Вот как вы передаете обработчик метода:
public delegate int MyFunctionDelegate(int _some, string _args);
MyFunctionDelegate MyFuncToCallFrmApp = new MyFunctionDelegate(PrintValues);
// the method I'm mapping has a valid signature for the delegate I'm mapping to:
public void PrintValues(int some, string args)
{
Console.WriteLine(string.Format("Some = {0} & Args = {1}", some.ToString(), args));
}
Надеемся, что приведенная ниже ссылка и пример кода помогут вамВы:
Учебное пособие для делегатов
Делегат в C # похож на указатель на функцию в C или C ++.Использование делегата позволяет программисту инкапсулировать ссылку на метод внутри объекта делегата.Затем объект делегата может быть передан в код, который может вызывать ссылочный метод, без необходимости знать во время компиляции, какой метод будет вызван.В отличие от указателей на функции в C или C ++, делегаты являются объектно-ориентированными, безопасными по типу и безопасными.(MSDN)
public class MyClass
{
// a delegate by definition is a collection of pointers to method handlers
// I declare my delegate on this line
// PLEASE NOTE THE SIGNATURE!
public delegate void MyFunctionDelegate(int some, string args);
public MyClass() : base()
{
// instantiate the delegate (AKA create the pointer)
MyFunctionDelegate myFunctionDelegate = new MyFunctionDelegate();
// map a valid method handler (WITH THE SAME SIGNATURE) to this delegate
// I'm using "+=" operator because you can add more than one handler to a collection
myFunctionDelegate += new MyFunctionDelegate(PrintValues);
// invoke the method handler (which in this case is PrintValues() - see below)
// NOTE THE SIGNATURE OF THIS CALL
myFunctionDelegate(1, "Test");
}
// this is the handler method that I am going to map to the delegate
// AGAIN, PLEASE NOTE THE SIGNATURE
public void PrintValues(int some, string args)
{
Console.WriteLine(string.Format("Some = {0} & Args = {1}", some.ToString(), args));
}
}