0
我正在尋找最乾淨的方式。儘管如此,我很想使用委託人。從非靜態類動態調用非靜態方法的最簡單方法?
我正在尋找最乾淨的方式。儘管如此,我很想使用委託人。從非靜態類動態調用非靜態方法的最簡單方法?
你是否在這樣的事情?
class A
{
public int Value;
public int Add(int a) { return a + Value; }
public int Mul(int a) { return a * Value; }
}
class Program
{
static void Main(string[] args)
{
A a = new A();
a.Value = 10;
Func<int, int> f;
f = a.Add;
Console.WriteLine("Add: {0}", f(5));
f = a.Mul;
Console.WriteLine("Mul: {0}", f(5));
}
}
如果你需要它的呼籲相綁定,如C++成員函數指針的對象,我不知道,C#語言支持。不過,您可以始終使用拉姆達或代表:
Func<A,int,int> f = delegate(A o, int i) { return o.Add(i); };
Console.WriteLine("Add: {0}", f(a, 5));
f = (A o, int i) => o.Mul(i);
Console.WriteLine("Mul: {0}", f(a, 5));
您可能需要添加更多詳細信息。代表是一個很好的選項選項,如果只有方法名稱,而不是指向它的實際指針,則反映出來。
我們需要更多關於您正在嘗試執行的操作的信息。請舉個例子。 – 2008-10-21 22:13:52
我不想過於具體,因爲我願意將我的代碼合併到任何干淨的解決方案中。在我開始編寫任何代碼之前我只想要一個乾淨的解決方案 – jdelator 2008-10-21 22:46:49