Делегат - это переменная, которая содержит то, что может быть вызвано. Если X
- это класс, который должен иметь возможность вызывать что-либо, то все, что ему нужно, это делегат:
public delegate object CommonDelegate();
class X
{
CommonDelegate d;
public X(CommonDelegate d)
{
this.d = d; // store the delegate for later
}
}
Позже он может вызвать делегата:
var o = d();
Кстати, вам не нужно определять такого делегата. Тип Func<Object>
уже существует и имеет правильную структуру.
Чтобы построить X, используйте два примера:
string Method1()
object Method2()
Вы могли бы сказать
var x = new X(obj.Method2);
Где obj
- это объект класса, который имеет Method2
. В C # 4 вы можете сделать то же самое для Method1
. Но в 3 вам нужно конвертировать, используя лямбду:
var x = new X(() => obj.Method1);
Это потому, что тип возвращаемого значения не совсем тот же: он связан с наследованием. Это будет работать автоматически только в C # 4 и только если вы используете Func<object>
.