2015-06-24 2 views
0

Так что я вызываю метод из своей dll, используя это.Метод Invokemember не может вызвать метод под открытым статическим классом

string sp = "dynamicmethodname"; 

Type TypeObj = typeof(DLLclass); 
Object MyObj = Activator.CreateInstance(TypeObj); 
TypeObj.InvokeMember(sp, BindingFlags.InvokeMethod | BindingFlags.Default, null, MyObj, new Object[] { gp }); 

будет работать, если мой метод находится под моим открытым классом. Но когда я попытался сделать что-то подобное.

public class Test { 
    public static class Met1{ 
    public static void _Validate(string gp){ 
     functions here..... 
    } 
    } 
} 

Метод invokemember больше не достигнет моего метода _Validate. Интересно, почему это больше не будет работать.

+1

Вы не можете создать экземпляр статического класса - это 'Activator.CreateInstance' на самом деле работает? – Charleh

+1

Если вы хотите вызвать метод в статическом классе, вы можете просто использовать invoke напрямую (и передать null в параметр экземпляра): см. Здесь http://stackoverflow.com/questions/614863/activator-and-static-classes – Charleh

+0

@Charleh Yah, это работает, если мой метод находится под моим открытым классом Test. Но мне нужно передать параметры для моего метода ... – user2119308

ответ

0

Полный пример того, что написал @Charleh:

public class Test 
{ 
    public static class Met1 
    { 
     public static void _Validate(string gp) 
     { 
      Console.WriteLine(gp); 
     } 
    } 
} 

MethodInfo method = typeof(Test.Met1).GetMethod("_Validate"); 
// Or 
// MethodInfo method = typeof(Test.Met1).GetMethod("_Validate", BindingFlags.Static | BindingFlags.Public); 
// or 
// MethodInfo method = typeof(Test.Met1).GetMethod("_Validate", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(string) }, null); 

method.Invoke(null, new object[] { "Hello world " }); 

Составитель: https://ideone.com/JIoHar

Смежные вопросы