제약 조건 및 오버로딩
C#에서는 사용할 수 있는 유형을 제한하기 위해 유형 매개 변수에 일반 제약 조건을 적용할 수 있습니다. 그러나 매개변수에 제약 조건이 적용되면 오버로드 해결 프로세스에 영향을 미칩니다.
다음 코드를 고려하세요.
static void Foo<T>(T a) where T : struct { } // 1 static void Foo<T>(T? a) where T : struct { } // 2
이 두 함수는 Foo를 오버로드하며 null 허용 여부에 따라 구별됩니다. 그러나 클래스 유형에 대한 제약 조건이 있는 세 번째 오버로드를 추가하려는 시도는 실패합니다.
static void Foo<T>(T a) where T : class { } // 3
이는 이 함수의 매개변수가 일치하기 때문입니다. FooT(T a)의 매개변수, 여기서 T: 구조체. 이 문제를 해결하려면 다른 매개변수에 제약 조건을 적용해야 합니다.
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 { } // 1 static void Foo<T>(T? a) where T : struct { } // 2 static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
이제 Foo를 오버로드하여 세 가지 경우를 모두 처리할 수 있습니다.
위 내용은 일반 제약 조건 Null 허용 여부가 C# 메서드 오버로드에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!