")을 파냅니다. 이를 사용하여 특정 데이터 유형으로 채웁니다."/> ")을 파냅니다. 이를 사용하여 특정 데이터 유형으로 채웁니다.">

>백엔드 개발 >C#.Net 튜토리얼 >C# 학습 일기 30---일반 클래스, 일반 메서드, 일반 대리자

C# 학습 일기 30---일반 클래스, 일반 메서드, 일반 대리자

黄舟
黄舟원래의
2017-01-21 15:46:351348검색

제네릭을 사용하면 프로그램에서 실제로 사용될 때까지 클래스나 메서드 내 프로그래밍 요소의 데이터 유형 사양 작성을 연기할 수 있습니다. 즉, 클래스나 메소드를 선언할 때 사용자가 전달하려는 매개변수의 유형이 무엇인지 모르기 때문에 해당 유형이 전달되는 곳에 "구멍("")을 파냅니다. 이를 사용하여 특정 데이터 유형으로 채웁니다.

일반 클래스:

앞서 배운 지식을 바탕으로 클래스를 정의합니다.

 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---일반 클래스, 일반 메서드, 일반 대리자

방금 제네릭에 대해 많은 것을 소개했습니다. 실수요? 환영합니다 ^_^

위 내용은 C# 학습일지 30---제네릭 클래스, 제네릭 메소드, 제네릭 델리게이트의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 참고해주세요. (www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.