C#make通用方法知道如何在“some”类上调用函数

时间:2014-06-06 13:16:13

标签: c# generics

是否可以在c#中创建泛型函数,将一些类和方法(类)和参数(也许是结果类型)作为输入,并生成该类的实例并调用该函数带参数的类并返回结果?

4 个答案:

答案 0 :(得分:3)

不确定

public class MyClass
{
    public class Test
    {
        public int TestMethod(int a, int b)
        {
            return a + b;
        }
    }

    public static void Main()
    {
        int result = ExecuteMethod<Test, int>("TestMethod", 1, 2);
        Console.Read();
    }

    public static TResult ExecuteMethod<TClass, TResult>(string methodName, params object[] parameters)
    {
        // Instantiate the class (requires a default parameterless constructor for the TClass type)
        var instance = Activator.CreateInstance<TClass>();

        // Gets method to execute
        var method = typeof(TClass).GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);

        // Executes and returns result
        return (TResult)method.Invoke(instance, parameters);
    }
}

答案 1 :(得分:2)

除非反射是您的绝对选择,否则请使用以下代理之一:

  • Action<T>:将允许您执行不返回值的方法。有几个重载可以让你传递额外的参数。

  • Func<TResult>:允许您执行返回类型TResult结果的方法。有更多的重载可以让你传递额外的参数。它们都遵循Func<T1, T2, T3, TResult>等语法。

  • 最后,您可以定义自己的代理。

答案 2 :(得分:1)

是的,这是可能的。你可以用反射做到这一点。

这里有一些有用的链接

Create an instance with reflection

How to invoke method with parameters

答案 3 :(得分:1)

以下是使用反射创建类实例的方法,然后在该类上调用方法。

假设你有一个班级:

public class MyType
{
    public void DoSomething()
    {
        // do stuff here
    }
}

您可以执行以下操作:

Type instanceType = Type.GetType("MyType");
object instance = Activator.CreateInstance(instanceType);

MethodInfo method = instanceType.GetMethod("MethodName");
object returnValue = method.Invoke(instance, new object[] { /* paramaters go here */ });