0

is it possible to make generic function in c# that get as input some class and method (of the class) and parameters to the method ( and maybe the result type ) and make instance of that class and call to the function of the class with the parameters and return the result?

4
  • You should be able to do it with reflection Commented Jun 6, 2014 at 13:20
  • can you add code please... Commented Jun 6, 2014 at 13:20
  • See here: msdn.microsoft.com/library/… and msdn.microsoft.com/library/… Commented Jun 6, 2014 at 13:23
  • When you say "get as input... method", do you mean a string containing the method name? Commented Jun 6, 2014 at 13:28

4 Answers 4

4

Sure.

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);
    }
}
Sign up to request clarification or add additional context in comments.

Comments

2

Unless Reflection is your absolute option, use one of the following delegates:

  • Action<T>: Will let you execute a method that does not return a value. There are several overloads that will let you pass in additional arguments.

  • Func<TResult>: Will let you execute a method that returns a result of type TResult. There are more overloads that will let you pass in additional arguments. They all follow the syntax Func<T1, T2, T3, TResult> and so on.

  • And finally, you can define your own delegate.

Comments

1

Yes it's possible. You can do that with reflection.

Here you have a few useful links

Create an instance with reflection

How to invoke method with parameters

Comments

1

Here's how you create an instance of a class using reflection and then call a method on that class.

Assuming you have a class:

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

You could do the following:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.