제네릭은 C# 2.0 버전에 추가되었으며 언어에서 가장 중요한 개념 중 하나입니다. 이를 통해 컴파일 타임에 유형이 안전한 재사용 가능한 고성능 코드를 작성할 수 있습니다. 제네릭을 사용하면 유형을 미리 알지 않고도 코드에서 유형을 사용할 수 있습니다.
Generics는 컬렉션, 대리자 및 비동기 코드를 포함하여 .NET의 여러 위치에서 사용됩니다. 제네릭을 사용하면 컬렉션의 크기를 미리 알 필요가 없으며 모든 요소 유형, 심지어 코드에 특정한 사용자 정의 데이터 유형에도 제네릭을 사용할 수 있습니다. C#은 제네릭 형식(클래스, 인터페이스 등) 및 제네릭 메서드에 대한 지원을 제공합니다.
제네릭에는 유형 매개변수와 유형 매개변수가 있습니다. 이는 메소드에 전달할 수 있는 매개변수가 있는 메소드와 유사합니다.
일반 유형을 선언하는 구문은 꺾쇠 괄호로 묶인 유형 매개변수로 구성됩니다. 유형의 이름입니다. 예를 들어 Locator
public class Locator<T> { }
Locator
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 'string' to 'int' [c-sharp]csharp(CS0029) int item = stringLocator.Locate(2);
가 제네릭 기본 유형이나 제네릭 인터페이스에서 상속받는 경우 제네릭 유형은 유형 매개변수를 유형 인수로 사용할 수 있습니다. 일반 LinkedList
public class LinkedList<T> : IEnumerable<T>
일반 메소드는 메소드 내에서 사용할 수 있는 유형 매개변수를 선언하고 이를 매개변수 및 반환 유형으로 사용하는 메소드일 뿐입니다. 다음 예에서 Swap
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>
마지막으로 보편적인 것이 무엇인지 이해하는 것이 중요합니다. 유형의 경우 열거형을 제외한 모든 것이 일반적일 수 있습니다. 여기에는 -
이 포함됩니다. 유형 멤버의 경우 메서드와 중첩 유형만 제네릭일 수 있습니다. 다음 멤버는 일반일 수 없습니다. -
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; } }
위 내용은 C#에서 제네릭이 작동하는 방식 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!