2017-07-25 4 views
0

Ich habe ein Problem beim Aufrufen verschiedener Methoden, die verschiedene Arten von Parametern haben. Für z. Ich habe 3 Methoden A, B, C mit Parametern wie folgt.Methoden mit verschiedenen Parametern aufrufen

A(string text, int num) 

B(bool type, int num2) 

C(string text2, boolean type2, int num3) 

Jetzt, wie diese drei Methoden nacheinander aufrufen? Die Methodennamen werden als Zeichenfolge abgerufen und in einem Array gespeichert. Nach dem Speichern der Methoden müssen die Methoden mithilfe der For Each-Schleife aufgerufen werden.

enter image description here

+0

Wenn die Methodennamen übereinstimmen Sie die Namen Strategien unterschiedlicher Aufrufs wechseln durch – jeanfrg

+1

Wo die Parameter tun können komme aus? Sind die Methoden überlastet? – Kempeth

Antwort

2

Sie in Dictionary die Methodennamen und Parameter wie string und object[]

Dictionary<string, object[]> methodsInfo = new Dictionary<string, object[]> 
{ 
    { "A", new object[] { "qwe", 4 }}, 
    { "B", new object[] { true, 5 }}, 
    { "C", new object[] { "asd", false, 42 }} 
}; 

Und sie Invoke von MethodInfo

foreach (KeyValuePair<string, object[]> methodInfo in methodsInfo) 
{ 
    GetType().GetMethod(methodInfo.Key).Invoke(this, methodInfo.Value); 
} 

mit aufrufen halten kann, wenn die Methoden in einem anderen sind Klasse rufen Sie sie so

Type classType = Type.GetType("namespace.className"); 
object classObject = classType.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }); 

foreach (KeyValuePair<string, object[]> methodInfo in methodsInfo) 
{ 
    classType.GetMethod(methodInfo.Key).Invoke(classObject, methodInfo.Value); 
} 

Hinweis: GetConstructor(Type.EmptyTypes) ist für leeren Konstruktor für parametrisierte Konstruktor (etwa mit int) verwenden GetConstructor(new[] { typeof(int) }).Invoke(new object[] { 3 }

Verwandte Themen