> 백엔드 개발 > C++ > C# 일반 제약 조건은 값 유형, Null 허용 값 유형 및 참조 유형을 어떻게 구별할 수 있습니까?

C# 일반 제약 조건은 값 유형, Null 허용 값 유형 및 참조 유형을 어떻게 구별할 수 있습니까?

Linda Hamilton
풀어 주다: 2025-01-02 17:13:39
원래의
688명이 탐색했습니다.

How Can C# Generic Constraints Distinguish Between Value Types, Nullable Value Types, and Reference Types?

일반 제약 조건: 값과 참조 구분

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿