大多数情况下,C#委托人已经将对象与成员函数一起存储了。但是有没有办法,像C++中的旧指针 - 成员函数一样,存储 - 并传递参数 - 只有成员函数本身?在C#中传递成员函数#
如果描述不够清晰,我给出一个独立的示例。而且,是的,在这个例子中,坚持传递成员函数是毫无意义的,但我对此有更多的认真使用。
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();
}
}
你看,我发现的唯一的解决方法是相当丑陋,可能很慢。
绝对清洁......但是,如果你已经有了委托,你不需要'ApplyHack'方法称它。 – cdhowie 2010-11-15 20:45:32
同意,但由于问题表明这个问题比例子中显示的更多,我试着保持我的答案类似。 – Zooba 2010-11-15 20:47:52
请注意,如果这对您更有用,您也可以将'Multiply'重命名为'operator *'以使操作符超载。 – Zooba 2010-11-15 20:48:38