namespace coordinates
{
class Example
{
public string name;
public Delegate mainFunc;
public Example(string name, Delegate callback)
{
this.name = name;
this.mainFunc = callback;
}
public void init()
{
this.mainFunc();
}
}
} namespace coordinates
{
class Example
{
public string Name;
public Action MainFunc;
public Example(string name, Action callback)
{
Name = name;
MainFunc = callback;
}
public void Init()
{
MainFunc?.Invoke();
}
}
}var r = new Example("Example name", () => Console.WriteLine("Example MainFunc")); Delegate (с большой буквы) - это статический класс, которые содержит методы для работы с делегатами. Сам же делегат нужно объявить через ключевое слово delegate (с маленькой буквы), как класс или интерфейс. Например: public delegate void TestDelegate(string message);MyClassи т.п., а не само ключевое слово class. В приведенном примере тип делегата будет TestDelegate. Чтобы передать с помощью делегата ссылку на функцию, сигнатуры функции и делегата должны полностью совпадать. В случае приведенного примера TestDelegate, функция должна также возвращать voidи принимать string. public delegate void MyDelegate(); Этому делегату вы можете присвоить ссылку на ваш метод void init(). Func и Action. Delegate на Actionв вашем коде, и всё должно работать. using System;
namespace TOSTER
{
class Program
{
static void Main(string[] args)
{
var example = new Example("example 1", () => { return "Result"; });
var result = example.init();
Console.WriteLine(result);
Console.ReadKey();
}
}
class Example
{
private readonly string _name;
private readonly Func<string> _del;
public Example(string name, Func<string> callback)
{
_name = name;
_del = callback;
}
public string init()
{
return _del.Invoke();
}
}
}