")을 파냅니다. 이를 사용하여 특정 데이터 유형으로 채웁니다."/> ")을 파냅니다. 이를 사용하여 특정 데이터 유형으로 채웁니다.">
제네릭을 사용하면 프로그램에서 실제로 사용될 때까지 클래스나 메서드 내 프로그래밍 요소의 데이터 유형 사양 작성을 연기할 수 있습니다. 즉, 클래스나 메소드를 선언할 때 사용자가 전달하려는 매개변수의 유형이 무엇인지 모르기 때문에 해당 유형이 전달되는 곳에 "구멍("")을 파냅니다. 이를 사용하여 특정 데이터 유형으로 채웁니다.
일반 클래스:
앞서 배운 지식을 바탕으로 클래스를 정의합니다.
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
물론 위의 예에서는 T를 배열로 지정할 수 없습니다. 원하는 경우 n_data의 유형이 배열인 경우 다음 예를 충족할 수 있습니다.
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
일반 방법:
스왑 교환 방법을 예로 들어 보겠습니다. C++의 스왑 함수는 다음과 같이 작성됩니다.
#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; }
결과: 1 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 중국어 홈페이지를 참고해주세요. (www.php.cn)!