>  기사  >  백엔드 개발  >  C#에서 제네릭이 작동하는 방식 설명

C#에서 제네릭이 작동하는 방식 설명

WBOY
WBOY앞으로
2023-08-27 23:45:021034검색

解释泛型在 C# 中的工作原理

제네릭은 C# 2.0 버전에 추가되었으며 언어에서 가장 중요한 개념 중 하나입니다. 이를 통해 컴파일 타임에 유형이 안전한 재사용 가능한 고성능 코드를 작성할 수 있습니다. 제네릭을 사용하면 유형을 미리 알지 않고도 코드에서 유형을 사용할 수 있습니다.

Generics는 컬렉션, 대리자 및 비동기 코드를 포함하여 .NET의 여러 위치에서 사용됩니다. 제네릭을 사용하면 컬렉션의 크기를 미리 알 필요가 없으며 모든 요소 유형, 심지어 코드에 특정한 사용자 정의 데이터 유형에도 제네릭을 사용할 수 있습니다. C#은 제네릭 형식(클래스, 인터페이스 등) 및 제네릭 메서드에 대한 지원을 제공합니다.

제네릭에는 유형 매개변수와 유형 매개변수가 있습니다. 이는 메소드에 전달할 수 있는 매개변수가 있는 메소드와 유사합니다.

일반 유형

일반 유형을 선언하는 구문은 꺾쇠 괄호로 묶인 유형 매개변수로 구성됩니다. 유형의 이름입니다. 예를 들어 Locator는 아래 예의 일반 클래스입니다.

public class Locator<T>
{

}

Locator 인스턴스를 생성하려면 new 키워드 뒤에 클래스 이름을 사용하세요. 그러나 T 대신 매개변수로 전달될 실제 유형을 지정할 수 있습니다. 다음 예에서는 문자열 유형을 매개변수로 전달합니다.

var stringLocator = new Locator<string>();

아래 예제와 같이 클래스 메서드에 유형 매개변수(T)를 사용할 수 있습니다.

public class Locator{
   public IList Items { get; set; }

      public T Locate(int index){
      return Items[index];
   }
}
var stringLocator = new Locator<string>();
string item = stringLocator.Locate(2);

제네릭의 또 다른 이점은 편집자가 제공하는 IntelliSense입니다. Visual Studio 또는 VS Code에서 stringLocator.Locate(4)를 입력하고 메서드 이름 위로 마우스를 가져가면 T 대신 문자열을 반환하는 것으로 표시됩니다. 문자열이 아닌 다른 유형에 결과를 할당하려고 하면 컴파일러에서 오류가 발생합니다. 예를 들어

// Error: Cannot implicitly convert type &#39;string&#39; to &#39;int&#39; [c-sharp]csharp(CS0029)
int item = stringLocator.Locate(2);

가 제네릭 기본 유형이나 제네릭 인터페이스에서 상속받는 경우 제네릭 유형은 유형 매개변수를 유형 인수로 사용할 수 있습니다. 일반 LinkedList 유형은 일반 IEnumerable 인터페이스와 기타 인터페이스를 구현합니다.

public class LinkedList<T> : IEnumerable<T>

일반 메소드

일반 메소드는 메소드 내에서 사용할 수 있는 유형 매개변수를 선언하고 이를 매개변수 및 반환 유형으로 사용하는 메소드일 뿐입니다. 다음 예에서 Swap은 T 유형의 매개변수 두 개를 사용하고 T 인스턴스를 반환하는 일반 메서드입니다.

public class Swapper{
   public T Swap<T>(T first, T second){
      T temp = first;
      first = second;
      second = temp;
      return temp;
   }
}

일반 유형과 마찬가지로 일반 메소드를 호출하면 강력한 유형의 변수가 반환됩니다.

var swapper = new Swapper();
int result = swapper.Swap<int>(5, 3);

에는 여러 일반 매개변수가 있을 수 있습니다. System.Collections.Generic 네임스페이스의 Dictionary 클래스에는 키와 값이라는 두 가지 형식 매개 변수가 있습니다.

public class Dictionary<TKey, TValue>

마지막으로 보편적인 것이 무엇인지 이해하는 것이 중요합니다. 유형의 경우 열거형을 제외한 모든 것이 일반적일 수 있습니다. 여기에는 -

  • Classes
  • Structures
  • Interfaces
  • Delegates

이 포함됩니다. 유형 멤버의 경우 메서드와 중첩 유형만 제네릭일 수 있습니다. 다음 멤버는 일반일 수 없습니다. -

  • Fields
  • Properties
  • Indexer
  • Constructor li>
  • Events
  • Terminator

Example

Live Demo

using System;
using System.Collections.Generic;
class Program{
   static void Main(){
      var stringLocator = new Locator<string>(){
         Items = new string[] { "JavaScript", "CSharp", "Golang" }
      };
      string item = stringLocator.Locate(1);
      Console.WriteLine(item); // CSharp
      var swapper = new Swapper();
      int a = 5, b = 3;
      int result = swapper.Swap<int>(ref a, ref b);
      Console.WriteLine($"a = {a}, b = {b}");
   }
}
public class Locator<T>{
   public IList<T> Items { get; set; }
   public T Locate(int index){
      return Items[index];
   }
}
public class Swapper{
   public T Swap<T>(ref T first, ref T second){
      T temp = first;
      first = second;
      second = temp;
      return temp;
   }
}

Output

rr 리

위 내용은 C#에서 제네릭이 작동하는 방식 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제