[ユニティ| C#]の基礎(10) - ジェネリック(ジェネリック)/ジェネリック制約()

[教材]

        オンライン>ドキュメント

            公式文書:https://docs.microsoft.com/zh-cn/dotnet/csharp/

            ルーキーチュートリアル(上級チュートリアル)https://www.runoob.com/csharp/csharp-tutorial.html

        >ビデオチュートリアル

            テンセント大学、シキ・カレッジ

        >ブックス 

    "C#のグラフィックチュートリアル" (章17) :https://www.cnblogs.com/moonache/p/7687551.html

 

[学習] 

  >ルーキーチュートリアル:高度なチュートリアルセクション(ジェネリック)

  > "C#のグラフィックのチュートリアル"(第17章)

 


【注意事項】

  • 定義
    • そして、中にC ++のテンプレートテンプレート<T>など
    • ジェネリック型を使用することができる:クラス、構造体、インターフェイス、デリゲート、方法
    • 注:一般的なだけでなく、T、複数のジェネリックT1、T2、T3を定義することができます...

 

  •  ジェネリッククラス(クラス)
    • 不明なタイプのTは、作成時に、目的は、よりマイリストの過負荷を避けるために決定しました
    • // Tは、オブジェクト作成時に決定されるタイプ
      パブリック クラス MYLISTの <T> 
      { 
          プライベート int型のサイズ= 10 ;
           公共T []の値;
           公共MYLISTの()
          {  =新しい新しいT [サイズ]; 
          } 
      } 
      
      無効スタート()
      { 
          MYLISTのを <整数 > = myList_int新しい新規 MYLIST <の整数 >();           // T INTに 
          MYLISTの <ストリング > = myList_string新しい新規 MYLISTの<文字列> (); // T为列 
          myList_int.values [ 0 ] = 1 ; 
          myList_string.values [ 0 ] = " アリス" 
      }
  • 一般的な機能
    • リダクション関数のオーバーロード、ジェネリックT適応パラメータのすべての異なる種類の
    • // 交换和B
      公共 ボイド SwapValue <T>  REF  T A REF T B
      { 
          TのTEMP == B; 
          B = TEMP。
      } 
      
      ボイド開始()
      { 
          int型 I1 = 1、I2 = 2 文字列 S1 = " アリス"、S2 = " ボブ" ; 
      
          SwapValue(REF I1、参考文献3-12)。// T为のint
          SwapValue(REF S1、REF S2); // Tは、ストリング 
          DEBUG.LOG(I1); // 出力:2 
          DEBUG.LOG(S1); // 出力:ボブ 
      }
  • ジェネリックデリゲート
    • ジェネリッククラス定義と同様に
    • // 泛型委托
      デリゲート T NumberChanger <T> (T、TのB)。
      
      公共 int型 AddNum(int型int型B)
      { 
          返す +のBと、
      } 
      パブリック 文字列 AddString( A、B)
      { 
          返す +のBと、
      } 
      
      ボイド開始()
      { 
          // T为INT 
          NumberChanger < INT > numberChanger_int = 新しい NumberChanger < 整数 > (AddNum)。
          // T为文字列
          NumberChanger < 文字列 > numberChanger_string = 新しい NumberChanger < 文字列 > (AddString)。
      } 

 

  • マルチ定義された一般的なT
    • ジェネリックは、必ずしも唯一のTは、また、複数の、T1、T2、T3を定義することができ...
    • // 複数のTジェネリックデリゲート
      デリゲート T3 NumberChanger <Tlの、T2、T3> (TL A、T2 B); 
      
      // int型フロートまた、文字列を返す
      パブリック ストリング AddNumToString(int型 A、フロートB)
      { 
          リターン(A +をB).ToString(); 
      } 
      
      無効(スタート)
      { 
          // 一般的な変数を作成 
          numberChanger < 整数浮動小数点文字列 > = numberChanger 新しい新しい numberChanger < 整数浮動小数点文字列 > (AddNumToString); 
      }

 

  • 一般的な制約(WHERE
    • Tは、背後にある汎用コードの定義に加えて、ジェネリック型制約のある   XXX:T WHERE  、xxxは型T必見を表し、

    • 例えば:
    • public class Major // 职业
      {
      
      };
      public class Teacher : Major // 教师
      {
      
      }
      
      public class Person<T1, T2, T3> 
          where T1 : class    // T1 必须是个类 类型
          where T2 : struct   // T2 必须是个结构 类型
          where T3 : Major    // T3 必须是基类为Major的类 
      {
          T1 value1;
          T2 value2;
          T3 value3;
      }
      
      void Start()
      {
          // 报错:T1和T3不满足约束条件
          //Person<int, int, int> person1 = new Person<int, int, int>();
      
          // 正确:
          //  string  类型为 class System.String
          //  int     类型为 struct System.Int32
          //  Teacher 类型为 class Major
          Person<string, int, Teacher> person2 = new Person<string, int, Teacher>(); 
      }

       

 

おすすめ

転載: www.cnblogs.com/shahdza/p/12244245.html