繁体   English   中英

从非静态类动态调用非静态方法的最简洁方法?

[英]Cleanest way to dynamically call a non static method from a non static class?

我正在寻找最干净的方法。 我很想使用不确定的代表。

你是在追求这样的东西吗?

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

您可能需要添加更多详细信息。 委托是一个不错的选择,如果您只有方法名而不是它的实际指针,那么反射也是一个不错的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM