이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 17968|회답: 0

[출처] 사용 분석 중 C#

[링크 복사]
게시됨 2016. 7. 12. 오전 11:35:43 | | |

where 절은 제네릭 선언에서 정의된 타입 매개변수의 변수로 사용할 수 있는 타입 제약 조건을 지정하는 데 사용됩니다.
1. 인터페이스 제약 조건.
예를 들어, 제네릭 클래스 MyGenericClass를 선언하면 타입 매개변수 T가 IComparable 인터페이스를 구현할 수 있습니다<T>:

공개 클래스 MyGenericClass<T> 중 T:IComparable { }

2. 기본 클래스 제약: 타입이 지정된 클래스를 기본 클래스(또는 클래스 자체)로 사용하여 해당 제네릭 타입의 타입 매개변수로 사용해야 함을 나타낸다.
이러한 제약 조건이 사용되면, 해당 매개변수 유형에 대한 다른 모든 제약 조건보다 먼저 나타나야 합니다.
클래스 MyClassy<T, U>
여기서 T : 클래스
여기서 U : struct
{
}

3.where절은 생성자 제약도 포함할 수 있습니다.
새로운 연산자를 사용해 타입 매개변수의 인스턴스를 생성할 수 있습니다; 하지만 타입 인자는 이 경우에 대해 constructor constraint new()에 의해 제약되어야 합니다. new() 제약 조건은 컴파일러에게 제공되는 모든 유형의 인자가 접근 가능한 매개변수 없는(또는 기본값) 생성자를 가져야 함을 알려줍니다. 예를 들어:
공개 클래스 MyGenericClass <T> 에서 T: IComparable, new()
{
다음 줄은 new() 제약 조건 없이는 불가능합니다:
T 항목 = 새로운 T();
}
new() 제약은 where절 끝에 나타납니다.

4. 여러 타입 매개변수의 경우, 각 타입 매개변수는 여기서 절을 사용합니다.
예를 들어:
인터페이스 MyI { }
클래스 사전<TKey,TVal>
여기서 TKey: IComparable, IEnumerable
여기서 TVal: MyI
{
공공 공허 Add(TKey key, TVal val)
{
}
}

5. 제네릭 메서드의 타입 매개변수에 제약 조건을 부착할 수도 있습니다. 예를 들면:

public bool MyMethod<T>(T t) where T : IMyInterface { }

타입 매개변수 제약 조건을 설명하는 문법은 위임자와 메서드 모두에서 동일하다는 점에 유의하세요:

대의원 T MyDelegate<T>() 여기서 T : new()





일반 어디

Generic 여기서 유형 매개변수를 자격화할 수 있습니다. 여러 가지 방법이 있습니다.

·여기서 T : struct는 T가 System.ValueType으로부터 상속받아야 할 타입 매개변수를 제한합니다.

·여기서 T: 클래스는 타입을 제한합니다. 매개변수 T는 참조 타입이어야 하며, System.ValueType에서 상속될 수 없습니다.

여기서 T : new()는 타입 매개변수를 제한한다. T는 기본 구성자를 가져야 한다.

·여기서 T : NameOfClass는 T가 클래스로부터 상속받거나 인터페이스를 구현해야 하는 타입 매개변수를 제한합니다.

이 수식자들은 결합할 수 있습니다. 예를 들어: public class Point (여기서 T : class), IComparable, new()




이전의:c# NHibernate help class
다음:c# http는 HttpListener로 스레드를 듣습니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com