C\#일반적인 제약 조건

1.참조 형식 제약 조건
struct RefSample where T:class         인용 유형 은 Class 로 제약 을 표시 하고 다른 인용 유형 은 구체 적 인 제약 입 니 다.
값 형식(int,char,datatime,struct)이 아 닌 인터페이스 인터페이스 인터페이스
배열 을 참조 형식 으로 구분 합 니 다.배열 을 정의 할 때 new 가 대상 을 만들어 야 하기 때 문 입 니 다.
RefSample로 정 의 된 인용 형식 이 어야 하지만 RefSample 은 여전히 값 형식 입 니 다.
2.값 형식 제약 조건
class ValSample where T:struct
인용 형식,int,char 등 유형 이 모두 struct 이기 때 문 입 니 다.

ValSample
3.구조 함수 유형 제약 조건

public T CreateInstance<T>() where T:new()
{
  return new T();
}
지정 한 형식 T 는 구조 함수 가 있어 야 합 니 다.Create Instance와 Create Instance는 모두 유효 합 니 다.하지만 Create Instance에는 구조 함수 가 없습니다.
4.변환 형식 제약 조건
하나의 제약 은 다른 유형 을 지정 할 수 있 습 니 다.형식 실 삼 은 일치 성,인용 또는 포장 을 통 해 암시 적 으로 이 유형 으로 전환 할 수 있어 야 합 니 다.너 는 또 하나의 유형의 실 삼 을 반드시 다른 유형의 실 삼 으로 바 꿀 수 있어 야 한다 고 규정 할 수 있다.이것 을 유형 매개 변수 제약 이 라 고 한다.
이해 할 수 있 는 뜻:교환 할 수 있 습 니 다.즉,우 리 는 포장 이나 강제 유형 을 통 해 목표 유형 으로 전환 할 수 있 는 유형 은 모두 유형 매개 변수 로 전송 할 수 있 습 니 다.
class Sample where T:Stream
유효:Sample이 자체 가 제약 조건 에 부합 합 니 다.
유효 하지 않 음:SampleString 형식 은 인용 또는 포장 을 통 해 강제로 Stream 으로 변환 할 수 없 기 때 문 입 니 다.
struct Sample where T:IDisposable
T 를 IDisposable 형식의 참조 형식 으로 규정 합 니 다.
유효:Sample참조 변환
무효:샘플
분석:왜 SqlConnection 은 가능 하지만 StringBuilder 는 안 됩 니까?그것들 은 모두 인용 유형 이다.
1.SqlConnection 은 IDisposable 인 터 페 이 스 를 실현 하기 때문에 협 변 할 수 있 습 니 다.


2.StringBuilder 는 ISerializable 인터페이스 만 구현 하고 경 로 를 통 해 IDisposable 로 변환 할 수 없습니다.

class Sample where T:IComparable
IComparable전 체 를 제약 으로 삼 아 IComparable의 유형 을 분석 하면 Type.IsValueType 으로 판단 할 수 있 기 때문에 true 는 값 유형 이 고 false 는 인용 유형 이다
typeof(IComparable).IsValueType   결 과 는 false 로 인용 형식 을 표시 합 니 다.
유효:Sample(포장 변환)
무효:샘플
여러 제약 조건 을 지정 할 수 있 습 니 다.
class sample where T:stream,IEnumerable,IComparable
class Sample where T:U
유효:샘플<스 트림,IDisposable>
무효:Sample
요약:입력 클래스 의 매개 변 수 를 바 꿀 수 있 는 지,규정된 매개 변수 와 입력 클래스 의 매개 변수 가 같은 인 터 페 이 스 를 실현 하 는 지,실현 하면 되 는 지,그렇지 않 으 면 안 됩 니 다.
다음 과 같 으 면 안 됩 니 다:System.Object,System.Enum,System.Value Type,System.Delegate,구조 또는 밀봉 류(String)
5.조합 제약 조건
유형 매개 변수 에 대한 제약 은 여러 가지 가 있 습 니 다.주의:한 가지 유형 만 있 을 수 있 습 니 다.값 유형 과 인용 유형 은 동시에 존재 할 수 없습니다.한 가지 유형 이 없 으 면 인용 유형 이자 값 유형 입 니 다.
모든 값 유형 에 구조 함수 가 없 기 때문에 그 후에 구조 함수 제약 이 있 을 수 없습니다.
유효:
class Sample where T:class,IDisposable,new()
class Sample where T:Stream where U:IDispsable
무효:
class Samplewhere T:class,struct(즉시 참조 형식 도 없고 값 형식 이기 때문에 잘못 되 었 습 니 다)
class Samplewhere T:Stream,class(참조 형식 제약 은 첫 번 째 제약 이 어야 합 니 다.맨 앞 에 놓 아야 하기 때문에 잘못된 것 입 니 다)Stream 은 전 송 된 매개 변 수 를 Stream 의 구체 적 인 유형 으로 제약 할 뿐 class 제약 은 참조 형식 으로 처음에 잘못 이해 하 였 습 니 다.
class Sample where T:new(),Stream   (new()는 마지막 에 두 어야 합 니 다)
class Samplewhere T:IDisposable,Stream(클래스 는 인터페이스 앞 에 두 어야 하기 때문에 유효 하지 않 습 니 다)
class Samplewhere T:XmlReader,IComparable,IComparable(변환 형식 에 대한 제약 은 같은 인터페이스 에 여러 번 나타 나 지 않 음)
class Sample where T:struct where  U:Class,T(유형 형 인삼"T"는"struct"제약 이 있 기 때문에"T"는"U"의 제약 으로 사용 할 수 없 기 때문에 무효 입 니 다)
class Sample where T:Stream ,U:IDisposable  문법 오류
인터넷 에 이런 버 전이 있 는 것 도 효과 가 있 습 니 다.이해 가 안 됩 니 다.
class Sample where T:struct,IDisapsable  IDisapsable 을 값 형식 으로 합 니까?
class Sample where T:class where U:struct ,T   T 는 인용 형식 인 데 왜 값 형식 과 함께 U 를 제약 합 니까?
지적 해 주 셨 으 면 좋 겠 습 니 다.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기