В большинстве случаев удобно, что делегаты С# уже хранят объект вместе с функцией-членом. Но есть ли способ сохранить и передать как параметры - только сама функция-член, так же, как хорошая старая функция-указатель на член в С++?
Если описание менее ясное, я даю автономный пример. И, да, в этом примере настойчивость, чтобы передать функции-члены, совершенно бессмысленна, но для этого у меня есть более серьезные возможности.
class Foo {
public int i { get; set; }
/* Can this be done?
public static int Apply (Foo obj, ???? method, int j) {
return obj.method (j);
}
*/
public static int ApplyHack (Foo obj, Func<int, int> method, int j) {
return (int) method.Method.Invoke (obj, new object [] { j });
}
public static readonly Foo _ = new Foo (); // dummy object for ApplyHack
public int Multiply (int j) {
return i * j;
}
public int Add (int j) {
return i + j;
}
}
class Program {
static void Main (string [] args) {
var foo = new Foo { i = 7 };
Console.Write ("{0}\n", Foo.ApplyHack (foo, Foo._.Multiply, 5));
Console.Write ("{0}\n", Foo.ApplyHack (foo, Foo._.Add, 5));
Console.ReadKey ();
}
}
Видите ли, единственный обходной путь, который я нашел, довольно уродлив и, вероятно, медленный.