값과 참조 유형을 구별하기 위한 일반 제약 조건
C#에서는 일반 제약 조건을 사용하여 유형 매개 변수에 대한 제한을 적용할 수 있습니다. 그러나 값 유형, null 허용 값 유형 및 참조 유형을 구별하려고 시도할 때 유형 매개변수 선언에 제약 조건을 사용하는 것만으로는 충분하지 않을 수 있습니다.
유형 매개 변수 선언 외부의 제약 조건
대신에 매개변수 선언 내에 제약조건을 배치하는 것이 더 효과적인 접근 방식입니다. 이는 일반적이지 않은 것처럼 보일 수 있지만 제약 조건에 따라 과부하 해결이 가능합니다. 다음 코드를 고려하십시오.
class RequireStruct<T> where T : struct { } class RequireClass<T> where T : class { } static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // Value type static void Foo<T>(T? a) where T : struct { } // Nullable value type static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // Reference type
이 코드에서 제약 조건은 매개 변수 선언 내에 지정됩니다. 값 유형(예: int)에 대해 Foo를 호출할 때 첫 번째와 두 번째 Foo 메서드가 모두 실행 가능합니다. 값 유형 제약 조건이 있는 메서드는 nullable이 아닌 값 유형(RequireStruct
사용 예
int x = 1; int? y = 2; string z = "a"; Foo(x); // Value type Foo(y); // Nullable value type Foo(z); // Reference type
이 접근 방식을 사용하면 오버로드 해결 중에 값 유형, null 허용 값 유형 및 참조 유형을 효과적으로 구별할 수 있습니다. 비정통적으로 보일 수도 있지만 제네릭 메서드 선언에서 이러한 다양한 유형을 구별하는 문제에 대한 실용적인 솔루션을 제공합니다.
위 내용은 일반 제약 조건은 C#에서 값 유형, Null 허용 값 유형 및 참조 유형을 어떻게 효과적으로 구별할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!