万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    ジェネリッククラスを理解する C#

    URL: http://msdn.microsoft.com/ja-jp/library/sz6zd40f.aspx

    // 具象クラス
    class BaseNode { }
    // ジェネリッククラス
    class BaseNodeGeneric<T> { }
    

    (原文)ジェネリック クラスは、具象、クローズ構築、またはオープン構築の各基本クラスから継承できます。
    ジェネリック クラス・・・class Hogeとなっているやつ。

    // ジェネリック クラスは、具象の基本クラスから継承できます。
    class NodeConcrete<T> : BaseNode { }
    
    // ジェネリック クラスは、クローズ構築の基本クラスから継承できます。
    class NodeClosed<T> : BaseNodeGeneric<int> { }
    
    //open constructed type 
    // ジェネリック クラスは、オープン構築の基本クラスから継承できます。
    class NodeOpen<T> : BaseNodeGeneric<T> { }
    


    (原文)非ジェネリック クラス (つまり具象クラス) は、クローズ構築の基本クラスからは継承できますが、オープン構築のクラスや型パラメーターからは継承できません。

    // 非ジェネリック クラス (つまり具象クラス) は、クローズ構築の基本クラスからは”継承できます”。
    class Node1 : BaseNodeGeneric<int> { }
    
    // 非ジェネリック クラス (つまり具象クラス) は、オープン構築のクラス(BaseNodeGeneric<T>)からは”継承できない”。
    // エラー!!
    // class Node2 : BaseNodeGeneric<T> {}
    
    // 非ジェネリック クラス (つまり具象クラス) は、型パラメーター(T {})からは”継承できない”。
    // エラー!!
    // class Node3 : T {}
    

    (原文)実行時に、クライアント コードから基本クラスをインスタンス化するときに必要な型の引数を提示する方法がないためです。

    Node1はintなので提示しなくてもわかる。

    Node1 hoge = new Node1 ();
    

    Node2はTなので提示の方法が分からない。具象クラスなので<>は使えない。

    Node2 hoge = new Node2<?> ();
    

    Node3はTなので提示の方法が分からない。具象クラスなので<>は使えない。

    Node3 hoge = new Node3<?> ();