C# 从非静态类动态调用非静态方法的最干净方法?

C# 从非静态类动态调用非静态方法的最干净方法?,c#,C#,我在寻找最干净的方法。我很想使用代理,但不确定。您可能需要添加更多详细信息。委托是一个很好的选择,如果您只有方法名,而没有指向它的实际指针,反射也是一个很好的选择。您想要这样的东西吗 class A { public int Value; public int Add(int a) { return a + Value; } public int Mul(int a) { return a * Value; } } class Program { static

我在寻找最干净的方法。我很想使用代理,但不确定。

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

您想要这样的东西吗

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));
    }
}
A类
{
公共价值观;
公共int Add(int a){返回一个+值;}
公共int Mul(int a){返回一个*值;}
}
班级计划
{
静态void Main(字符串[]参数)
{
A=新的A();
a、 数值=10;
函数f;
f=a.加上;
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 ) );
Func f=delegate(ao,inti){return o.Add(i);};
Console.WriteLine(“Add:{0}”,f(a,5));
f=(ao,inti)=>o.Mul(i);
Console.WriteLine(“Mul:{0}”,f(a,5));

我们需要更多关于您尝试执行的操作的信息。请举个例子。我不想太具体,因为我愿意将我的代码加入任何干净的解决方案中。在开始编写任何代码之前,我只需要一个干净的解决方案。是的,但我们对您真正想要做的事情知之甚少。你有什么信息?您是否有实例和方法名称?参数呢?我不想说得太具体,因为我愿意将我的代码纳入任何干净的解决方案中。