从非静态类动态调用非静态方法的最干净方法
本文关键字:方法 静态方法 静态类 动态 调用 | 更新日期: 2023-09-27 17:48:49
我正在寻找最干净的方法。不过,我很想使用不确定的代表。
你在追求这样的东西吗?
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#是否支持。不过,您可以始终使用lambda或委托:
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 ) );
您可能需要添加更多详细信息。委托是一个很好的选项,如果您只有方法名称,而没有指向它的实际指针,那么反射也是如此。