ジェネリックを使用すると、プログラムで実際に使用されるまで、クラスまたはメソッド内のプログラミング要素のデータ型の仕様の書き込みを延期できます。つまり、クラスやメソッドを宣言する際、ユーザーがどのような型のパラメータを渡したいのかが分からないため、型を渡す「穴(“<T>”)を掘る」ことになります。それを使用して、特定のデータ型を入力します。
ジェネリッククラス:
これまで学んだ知識をもとにクラスを定義します:
class Data { public int n_data; }
このとき、n_dataのデータ型はint型と決まっているので、それに値を代入する際にはと書き換えると、 int 型のみになります。
class Data<T> { public T n_data; }
この時点では、n_data のデータ型がどのような型であるかまだ決まっていないので、代入する際に指定する必要があります。穴を埋めるn_dataの型であるT、
Data<int> data = new Data<int>(); //指定T为int Data<string> data = new Data<string>(); //指定T为string
もちろん、上記の例では、n_dataの型を配列にする場合、Tを配列として指定することはできません。次の例は満たすことができます:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class Data<T> //泛型类 { public T[] n_data; //泛型变量 public Data(int size) //构造方法,new的时候调用构造方法开辟空间 { n_data = new T[size]; } //输入 public void setdata(int index,T value) { n_data[index] = value; } //输出 public T getdata(int x) { return n_data[x]; } } class Program { static void Main(string[] args) { Data<int> data = new Data<int>(5); data.n_data[2] = 2; Console.WriteLine(data.n_data[2]); } } }
結果は: 2
汎用メソッド:
これには swap を使用します Exchange メソッドを例に取ると、C++ の swap 関数は次のように記述されます:
#include <iostream> using namespace std; template <typename T> void swap1(T &a,T &b) //也可以看作泛型 { T temp; temp = a; a = b; b = temp; } int main() { int a=0,b=1; swap1(a,b); cout<<a<<"\t"<<b<<endl; return 0; }
Result: 0
a と b が文字型の場合、上記の関数も適用できます。 C#swap メソッドは次のとおりです:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class data {//swap方法,ref是按地址传递 public static void swap<T>(ref T a, ref T b) { T temp; temp = a; a = b; b = temp; } static void Main(string[] args) { string a = "HC"; string b = "666"; swap(ref a,ref b); Console.WriteLine(a+"\t"+b); //结果 666 HC } } }
結果: 666 HC++ これは C++
と非常によく似ています。
汎用デリゲート:
上記の例に従って、汎用デリゲートもあります:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { public delegate void MyDelegate<T>();//泛型委托 class Data<T> { private T a; private T b; public void setvalue(T x, T y) { a = x; b = y; } //swap方法,ref是按地址传递 public void swap() { T temp; temp = a; a = b; b = temp; } public void printvalue() { Console.WriteLine(a + "\t" + b); } } class program { static void Main(string[] args) { Data<string> data = new Data<string>(); data.setvalue("HC","666"); MyDelegate<string> my = new MyDelegate<string>(data.swap); my += data.printvalue; my(); //结果 666 HC } } }
結果:
ジェネリックについては以上です。間違いがあればお気軽に指摘してください^_^
上記は C# 学習日記 30 の内容です ---ジェネリック クラス、ジェネリック メソッド、ジェネリック デリゲート、その他関連 PHP の中国語に注意してくださいコンテンツについては、Web サイト (www.php.cn) を参照してください。