2011-12-08 9 views
2

ストレートポイント。一般的な継承と代理人

class Test 
{ 
    private Dictionary<Type, Action<Base>> dict; 

    public Test() 
    { 
     dict = new Dictionary<Type, Action<Base>>(); 
    } 

    public void Test(Inh inh) 
    { 
    } 

    public void Add<T>(Action<T> callback) 
     where T : BasePackage 
    { 
     dict.Add(typeof(T), callback); 
    } 
} 

主なアイデアのように辞書を使用することです: - 私は、単純な継承モデル

class Base {} 
class Inh : Base {} 

を持っていると私はこれ(このコードはコンパイルされませんのでご注意)のような何かをしたいとしましょう関数呼び出し元。

dict[typeof(Inh)](new Inh()); 

残念ながら、私は自分自身がそう、私は助けを求めていますsoulutionを見つけることができません:私はコールバックとしてTest FUNCを追加した場合たとえば、私は後にこのような何かを行うことができます。誰かが何か提案があればそれは高く評価されるでしょう。

+0

これは間違った方向から近づいている可能性があります。 –

+0

なぜ継承+関数テーブルを混在させるのですか? –

+2

実際の目標は何ですか?これをどのように使用する予定ですか? –

答えて

4

これを行うと、型を強制することができます。これは、間違った型のデリゲートを参照して呼び出すと、実行時に(無効なキャストのために)失敗する可能性があることに注意してください。その可能性のある失敗のケースは、これが代理人用法の自動反動の基準を満たさない理由です。

public void Add<T>(Action<T> callback) 
     where T : Base 
    { 
     dict.Add(typeof(T), Base b => callback((T)b)); 
    } 
+0

これは素晴らしいです! – Milcho

関連する問題