2008-10-21 116 views
0

我正在寻找最干净的方式。尽管如此,我很想使用委托人。从非静态类动态调用非静态方法的最简单方法?

+0

我们需要更多关于您正在尝试执行的操作的信息。请举个例子。 – 2008-10-21 22:13:52

+0

我不想过于具体,因为我愿意将我的代码合并到任何干净的解决方案中。在我开始编写任何代码之前我只想要一个干净的解决方案 – jdelator 2008-10-21 22:46:49

回答

1

你是否在这样的事情?

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)); 
0

您可能需要添加更多详细信息。代表是一个很好的选项选项,如果只有方法名称,而不是指向它的实际指针,则反映出来。