이 문서에서는 C# 제네릭의 제약 조건, 즉 참조 유형 제약 조건, 생성자 유형 제약 조건, 조합 제약 조건에 대해 자세히 소개합니다. 매우 좋은 참조 값을 가지고 있으니 아래 편집기로 살펴보겠습니다
1. 참조 유형 제약
struct RefSample< T> where T:class 참조 유형은 Class를 사용하여 제약 조건을 나타내고 다른 참조 유형은 특정 제약 조건을 나타냅니다.
은 제약 조건이 클래스(참조 유형)여야 하고 값 유형(int, char, datatime, struct)이 될 수 없으며 인터페이스
구별일 수 있음을 의미합니다. 배열은 다음과 같습니다. 배열을 정의할 때 new를 사용하여 객체를 생성해야 하기 때문에 참조 유형입니다.
RefSample
값 유형 제약
class ValSample
는 참조 유형입니다. 왜냐하면 int, char 및 기타 유형이 모두 struct
이기 때문입니다.ValSample
3. 생성자 유형 제약
public T CreateInstance<T>() where T:new() { return new T(); }
지정된 유형 T에는 생성자가 있어야 하며 CreateInstance
4. 변환 유형 제약 조건
제약 조건을 사용하면 다른 유형을 지정할 수 있으며 일관성, 참조 또는 박싱 변환을 통해 암시적으로 변환할 수 있어야 합니다. . 유형 인수를 다른 유형 인수로 변환할 수 있도록 지정할 수도 있습니다. 이를 유형 매개변수 제약 조건이라고 합니다.
이해된 의미: 상호 교환 가능합니다. 즉, boxing 또는 강제 유형을 통해 대상 유형으로 변환할 수 있는 모든 유형을 사용하여 유형 매개변수를 전달할 수 있습니다.
class Sample
이 유효한 경우: Sample은 유효하지 않습니다.:Sample
struct Sample T는 IDisposable 유형의 참조 유형이어야 한다고 지정됩니다.
유효: 샘플
유효: 샘플
분석: 왜 SqlConnection은 가능하지만 StringBuilder는 불가능합니까? 모두 참조 유형입니다
1. SqlConnection은 IDisposable 인터페이스를 구현하므로 공변적일 수 있습니다
IComparable
참조 유형으로 false로 표시되는 결과 유효: Sample
클래스 샘플
유효: 샘플
요약: 들어오는 클래스 매개변수를 변환할 수 있는지, 지정된 매개변수와 들어오는 클래스 매개변수가 동일한 인터페이스를 구현하는지 여부에 따라 다릅니다. 그렇다면 괜찮지만 그렇지 않으면 불가능합니다.
은 System.Object, System.Enum, System.ValueType, System.Delegate, 구조체 또는 봉인 클래스(문자열)일 수 없습니다.
5. 조합 제약
참고: 한 가지 유형만 가능하며 값 유형과 참조 유형은 존재할 수 없습니다. 동시에, 유형이 참조 유형이면서 값 유형일 필요는 없습니다. 모든 값 유형에는 생성자가 없는 함수가 있으므로 이후에는 생성자 제약 조건이 있을 수 없습니다. 유효: class Sample Invalid: class Sample class Sample class Sample class Sample class Sample 온라인에도 이 버전이 있는 걸 보니유효 이해가 안 돼요: class 샘플 class Sample 수정해주셨으면 좋겠습니다
위 내용은 C# generics 제약사항의 내용은 사진과 글로 자세히 소개되어 있으니, 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!
class Sample
class Sample