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();
}
}
}