2009-09-13 12 views

Odpowiedz

32

Wystarczy

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

gdzie typeName to nazwa typu jako ciąg znaków, methodName to nazwa metody jako ciąg znaków, a arguments jest tablicą obiektów zawierających argumenty do wywołania metody z .

+0

Wow, dobrze, że działa - nie wiedziałeś o Type.GetType - po prostu upewnij się, że nazwa klasy statycznej jest w pełni kwalifikowana z przestrzenią nazw –

+0

pracuje dla *** 'internal static class' ***? – Kiquenet

+0

@GeorgeMauer co jeśli nie ma obszaru nazw? – MonsterMMORPG

1

Oto podstawowy zarys tego, co chcesz zrobić:

  1. skanować wszystkie obiekty w bieżącym AppDomain - znaleźć taki, który pasuje do tego, co wiesz, że nazwa klasy będzie
  2. Get metody statyczne z nazwą, którą znasz na tym obiekcie
  3. Dynamicznie wywołaj.

Edytuj: To zadziała, jeśli nie znasz przestrzeni nazw klasy statycznej. W przeciwnym razie użyj rozwiązania Daniela Brücknera jako znacznie prostszego.

+0

myślę, że nadal trzeba zeskanować AppDomain - Jeśli można po prostu utworzyć instancję klasy będzie to dynamiczny język –

+1

Type.GetType? http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx – dtb

+2

To może być dosłowny opis tego, co dzieje się podczas procesu refleksji, jednak nie sądzę, aby ta odpowiedź była pomocna dla PO, ponieważ nie demonstruje praktycznie ani nie wyjaśnia, w jaki sposób opisane kroki można wykonać za pomocą.net framework APIs – Crippledsmurf

1
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); 
3

Najpierw trzeba uzyskać typ (przez powtarzanie montażu przy użyciu odbicia)

patrz link do szczegółów: http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

lub użyj

Assembly.GetType 

skoro masz typ w ręku można iterować po elementach za pomocą odbicia lub

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

następnie można użyć MethodInfo.Invoke i przekazać argumenty, aby wywołać metodę, gdy chcesz go wywołać.

+0

** MyClass ** jest publiczne, nie jest sposobem na *** 'internal static class' ***? – Kiquenet

1

Co robisz tutaj odzwierciedla typu nazwie Environment i stosując metody GetPropery i GetGetMethod dostać metody GET właściwości jak tak Environment.CurrentDirectory;

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

Wywołanie metody get właściwości zwraca jej wartość i jest równe;

var value = Environment.CurrentDirectory; 
Powiązane problemy