Calling a method on a static class given its type name and method names as strings

后端 未结 5 343
旧时难觅i
旧时难觅i 2020-12-08 10:15

How could I go about calling a method on a static class given the class name and the method name, please?

For example:

Given System.Environment

相关标签:
5条回答
  • 2020-12-08 10:50

    Just

    Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments);
    

    where typeName is the name of the type as a string, methodName is the name of the method as a string, and arguments is an array of objects containing the arguments to call the method with.

    0 讨论(0)
  • 2020-12-08 10:51

    What you are doing here is reflecting on the type named Environment and using the GetPropery and GetGetMethod methods to get the get method of the Environment.CurrentDirectory property like so;

    var getMethod = typeof(Environment).GetProperty("CurentDirectory", BindingFlags.Public | BindingFlags.Static).GetGetMethod();
    var currentDirectory = (string)getMethod.Invoke(null, null);
    

    Calling the get method of a property returns it's value and is equivilent to;

    var value = Environment.CurrentDirectory;
    
    0 讨论(0)
  • 2020-12-08 10:54
    System.Reflection.Assembly info = typeof(System.Environment).Assembly;
    
    Type t = info.GetType("System.Environment");
    MethodInfo m = t.GetMethod("GetFolderPath");
    
    object result = m.Invoke(null, arguments);
    
    0 讨论(0)
  • 2020-12-08 11:03

    First you need to get the Type (by iterating on the assembly using reflection)

    see this link for details: http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

    or use

    Assembly.GetType
    

    once you have the type in hand you can iterate over members using reflection or

    MethodInfo method = typeof(MyClass).GetMethod("MyMethod");
    

    then you can use MethodInfo.Invoke and pass arguments to invoke the method when you want to invoke it.

    0 讨论(0)
  • 2020-12-08 11:05

    Here is a basic outline of what you would do:

    1. Scan all the objects in the current AppDomain - find the one that matches what you know the class name to be
    2. Get the static method with the name you know on that object
    3. Dynamically invoke it.

    Edit: This will work if you do not know the namespace of the static class. Otherwise use Daniel Brückner's solution as its much simpler.

    0 讨论(0)
提交回复
热议问题