C#ジェネリック(ジェネリック)
それは実際にプログラムを使用する時が来たまでジェネリック(ジェネリック)は 、あなたが仕様のクラスやメソッドのプログラミング要素のデータ型の製造を遅らせることができるようになります。 言い換えれば、それはあなたが任意のデータ型を扱うことができる汎用的なクラスやメソッドを記述することができます。
あなたは、パラメータのデータ型を代入して仕様クラスやメソッドを書くことができます。 関数が呼び出されると、コンストラクタやメソッドのコンパイラは、指定されたデータ型を処理するコードを生成するクラスに遭遇します。 次の簡単な例では、この概念を理解するのに役立ちます:
システムを用いました。 System.Collections.Genericを使用しました。 名前空間のGenericApplication { パブリッククラスMyGenericArray <T> { プライベートT []配列。 公共MyGenericArray(int型のサイズ) { 配列=新しいT [サイズ+ 1]; } 公共TのgetItem(int型のインデックス) { 配列[インデックス]を返します。 } 公共ボイドSetItem関数(int型のインデックス、T値) { 配列[インデックス] =値; } } クラステスター { 静的な無効メイン(文字列[] args) { //整数配列MyGenericArray <整数> intArray =新しいMyGenericArray <整数>(5)を宣言します。 (; C <5; C ++のint型、C = 0)//の値を設定 { intArray.setItem(C、C * 5)。 } 値を取得します//(; C <5; int型、C = 0、C ++) { Console.Write(intArray.getItem(C)+ "")。 } Console.WriteLineを(); //(5)文字配列MyGenericArray <文字> charArray =新しいMyGenericArray <文字>宣言。 (; C <5; C ++のint型、C = 0)//の値を設定 { charArray.setItem(C、(char型)(C + 97)); } 値を取得します//(; C <5; int型、C = 0、C ++) { Console.Write(charArray.getItem(C)+ "")。 } Console.WriteLineを(); Console.ReadKey()。 } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
05101520 ABCDE
ジェネリック(ジェネリック)の特徴
ジェネリック医薬品の使用は、具体的には、以下の態様では、技術力を強化するためのプログラムです。
- それはあなたがコードの再利用、安全性の保護の種類と改善パフォーマンスを最大化するのに役立ちます。
- あなたは一般的なコレクションクラスを作成することができます。 .NET Frameworkクラスライブラリは、System.Collections.Generic名前空間内のいくつかの新しいジェネリックコレクションクラスが含まれています。 あなたが代わりににSystem.Collectionsコレクションクラスこれらのジェネリックコレクションクラスを使用することができます。
- あなたはあなた自身の一般的なインタフェースの、一般的なクラス、ジェネリックメソッドジェネリックイベントやジェネリックデリゲートを作成することができます。
- あなたは、特定のデータ型にアクセスするための汎用的なクラスを制約することができます。
- 情報のタイプで使用に関する一般的なデータタイプは、反射を使用して、実行時に取得することができます。
ジェネリック(ジェネリック)メソッド
上記の例では、我々は一般的なクラスを使用している、私たちは、ジェネリックメソッドの型パラメータを宣言することができます。 次のプログラムは、この概念を示しています。
システムを用いました。 System.Collections.Genericを使用しました。 名前空間GenericMethodAppl { クラスプログラム { 静的な無効スワップ<T>(refのTのLHS、REF T RHS) { Tの一時。 温度= LHS。 LHS = RHS; 右辺=温度; } 静的な無効メイン(文字列[] args) { 、B int型。 char型のC、D; = 10; B = 20; C = 'I'; dは= 'V'; 交換価値のConsole.WriteLineを(「スワップを呼び出す前のInt値: ")の前に//表示します。 Console.WriteLineを( "A = {0}、B = {1}"、a、b)は、 Console.WriteLineを(「スワップを呼び出す前にシャア値: "); Console.WriteLineを( "C = {0}、D = {1}"、C、D)。 //コールスワップ スワップは、<整数>(参考文献のB、REF)。 スワップ<文字>(refのcの、REF D)。 //表示値Console.WriteLineを交換した後(「スワップを呼び出した後のInt値: "); Console.WriteLineを( "A = {0}、B = {1}"、a、b)は、 Console.WriteLineを(「スワップを呼び出した後のChar値: "); Console.WriteLineを( "C = {0}、D = {1}"、C、D)。 Console.ReadKey()。 } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
呼び出しスワップの前にint型の値: = 10、B = 20 シャアは、スワップを呼び出す前に、値: C = I、D = V スワップを呼び出した後int型の値: = 20、B = 10 スワップを呼び出した後のChar値: C = V、D = I
委託ジェネリック(ジェネリック)
あなたはジェネリックデリゲート型のパラメーターによって定義することができます。 例えば:
デリゲートT NumberChanger <T>(T n)で、
次の例では、手数料の使用方法を示しています。
システムを用いました。 System.Collections.Genericを使用しました。 デリゲートT NumberChanger <T>(T n)で、 名前空間GenericDelegateAppl { クラスTestDelegate { 静的なint型numの= 10; パブリックstatic int型AddNum(int型のp) { NUM + = P; NUMを返します。 } パブリックstatic int型MultNum(int型のq) { NUM * = Q; NUMを返します。 } パブリックstatic int型getNum() { NUMを返します。 } 静的な無効メイン(文字列[] args) { //デリゲートインスタンスNumberChanger <整数> NC1 =新しいNumberChanger <整数>(AddNum)を作成します。 NumberChanger <整数> NC2 =新しいNumberChanger <整数>(MultNum)。 //デリゲートオブジェクトNC1(25)を使用してメソッドを呼び出します。 Console.WriteLineを( "民の値:{0}"、getNum()); NC2(5)。 Console.WriteLineを( "民の値:{0}"、getNum()); Console.ReadKey()。 } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
民の値:35 民の値:175