2016-05-24 4 views
4

Ich habe eine abstrakte Klasse (Parent) mit einer Funktion namens funcA. Parent hat 4 Kinder und der Benutzer muss auswählen, auf welchen er zugreifen soll. Was ich tun muss, ist der Zugriff auf die übergeordnete Methode funcA in der Kind-Unterklasse, die vom Benutzer ausgewählt wurde und diese aktiviert.Gehen Sie zur Methode eines unbekannten Typs und führen Sie sie aus C#

Parent:

public abstract class Parent 
{ 
public string PropA {get; set;} 
public string PropB {get; set;} 
public DateTime PropC {get; set;} 
public DateTime PropD {get; set;} 

public abstract void FuncA(); 

} 

Kind:

public class ChildA: Parent 
{ 
    public string PropE {get; set;} 
    public string PropF {get; set;} 

    public override void FuncA() 
    { 
    // Some Code 
    } 
} 

Main:

public static void Main(string[] args) 
{ 
    Console.WriteLine("Enter the type of child: "); 
    string type = Console.Readline(); 

    // I need to identify which child is type, access that child's FuncA and 
    // run it. 
} 

Der String-Typ als ein bestehendes Kind validiert. Es gibt keine Möglichkeit, dass der Benutzer einen Typ eingibt, der nicht existiert.

+0

Verwenden Sie Reflexion? 'Geben Sie t = Type.GetType (thatType); t.GetMethod ("FuncA"). Invoke (...); ' –

+1

Ich habe es versucht, aber Invoke fordert ein Objekt zum Ausführen der Methode an. Alles was ich habe ist der Typ und ich kann kein Objekt eines unbekannten Typs erstellen. –

+0

@EinatLugassy Sie können _oder _ nicht wissen, wie man? –

Antwort

7

Wenn Sie immer Aufruf die abstrakte Methode sind, können Sie nur das Objekt zu einem Parent gegossen und das Verfahren in einer typsichere Weise nennen:

Type t = Type.GetType("ChildA"); 
Parent p = Activator.CreateInstance(t) as Parent; 
p.FuncA(); 

Seit FuncA ist virtuell, der abgeleitet Implementierung wird verwendet.

+0

Es funktioniert, danke! :) –

Verwandte Themen