2016-05-24 5 views
4

私はfuncAという関数を持つ抽象クラス(親)を持っています。 親は4つのchildernを持ち、ユーザーはアクセスするものを選択する必要があります。 私がする必要があるのは、ユーザーが選択してアクティブ化した子サブクラスのオーバーライドされたメソッドfuncAにアクセスすることです。未知の型のメソッドを取得して実行するc#

親:

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(); 

} 

子供:

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

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

メイン:

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. 
} 

文字列型は、既存の子として検証されます。ユーザーが存在しない型を入力する方法はありません。

+0

反射を使用しますか? 'タイプt = Type.GetType(そのタイプ); t.GetMethod( "FuncA")。Invoke(...); ' –

+1

私は試みましたが、Invokeはメソッドを実行するオブジェクトを要求します。私が持っているのは型だけなので、型が不明なオブジェクトを作成することはできません。 –

+0

@EinatLugassyあなたは_できませんか、あなたは_方法を知っていませんか? –

答えて

7

あなたはいつもならあなただけParentにオブジェクトをキャストし、タイプセーフな方法でメソッドを呼び出すことができ抽象メソッド呼び出し:​​ので

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

は、ほとんどの派生、仮想です実装が使用されます。

+0

それは、ありがとう! :) –

関連する問題