일반 제약 조건: 값과 참조 구분
C#에서는 일반 제약 조건을 사용하여 유형 매개 변수에 대한 특정 요구 사항을 적용할 수 있습니다. 이는 값 유형, Null 허용 값 유형 및 참조 유형을 구별할 때 특히 유용합니다.
값 및 Null 허용 값 유형에 대한 제약 조건
구분하는 다음 코드를 고려하세요. 일반 값 유형과 null 허용 값 유형 사이:
static void Foo<T>(T a) where T : struct { } // Plain value type (e.g. int) static void Foo<T>(T? a) where T : struct { } // Nullable value type (e.g. int?)
제약조건 for Reference Types
그러나 where T : class를 사용하여 참조 유형에 대한 제약 조건을 정의하려고 하면 컴파일러 오류가 발생합니다. 이는 과부하 해결 중에 제약 조건이 적용되고 매개 변수가 제약 조건보다 우선하기 때문입니다.
이 문제를 해결하려면 덜 우아한 방식이기는 하지만 제약 조건을 매개 변수 내에 배치할 수 있습니다.
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 { } // Plain 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
선택적 매개변수인 무시 내에 제약조건을 배치함으로써 컴파일러는 매개변수 유형과 충돌하지 않고 다양한 사례를 구별할 수 있습니다. 이를 통해 참조 유형을 올바른 함수 오버로드에 매핑할 수 있습니다.
위 내용은 C# 일반 제약 조건은 값 유형, Null 허용 값 유형 및 참조 유형을 어떻게 구별할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!