C# C“使通用方法知道如何调用上的函数”;“一些”;班

C# C“使通用方法知道如何调用上的函数”;“一些”;班,c#,generics,C#,Generics,是否可以在c#中生成泛型函数,将某些类和方法(类的)以及方法的参数(可能还有结果类型)作为输入,并生成该类的实例,使用参数调用该类的函数并返回结果?是的,这是可能的。你可以通过反射来做到这一点 这里有一些有用的链接 除非反射是您的绝对选项,否则请使用以下学员之一: :将允许您执行不返回值的方法。有几个重载将允许您传入其他参数 :将允许您执行返回类型为TResult的结果的方法。有更多的重载将允许您传递额外的参数。它们都遵循语法Func等等 最后,您可以定义自己的委托 当然可以 public

是否可以在c#中生成泛型函数,将某些类和方法(类的)以及方法的参数(可能还有结果类型)作为输入,并生成该类的实例,使用参数调用该类的函数并返回结果?

是的,这是可能的。你可以通过反射来做到这一点

这里有一些有用的链接


除非反射是您的绝对选项,否则请使用以下学员之一:

  • :将允许您执行不返回值的方法。有几个重载将允许您传入其他参数

  • :将允许您执行返回类型为
    TResult
    的结果的方法。有更多的重载将允许您传递额外的参数。它们都遵循语法
    Func
    等等

  • 最后,您可以定义自己的委托

  • 当然可以

    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);
        }
    }
    
    公共类MyClass
    {
    公开课考试
    {
    公共int测试方法(int a,int b)
    {
    返回a+b;
    }
    }
    公共静态void Main()
    {
    int result=ExecuteMethod(“TestMethod”,1,2);
    Console.Read();
    }
    公共静态TResult ExecuteMethod(字符串方法名,参数对象[]参数)
    {
    //实例化类(TClass类型需要默认的无参数构造函数)
    var instance=Activator.CreateInstance();
    //获取要执行的方法
    var method=typeof(TClass).GetMethod(methodName,BindingFlags.Public | BindingFlags.Instance);
    //执行并返回结果
    return(TResult)方法。Invoke(实例、参数);
    }
    }
    
    下面介绍如何使用反射创建类的实例,然后调用该类上的方法

    假设你有一门课:

    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 */ });
    

    您应该能够使用reflectioncan添加代码,请参见此处:当您说“get as input…method”时,您是指包含方法名称的字符串吗?