大多數情況下,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