C# 범용 구속의 깊은 이해

1645 단어
where 자구는 형식 제약을 지정하는 데 사용되며, 이 제약은 일반 성명에 정의된 형식 매개 변수로 사용할 수 있습니다.
1. 인터페이스 제약.예를 들어, 일반 클래스 MyGenericClass를 선언하면 유형 매개변수 T가 IComparable 인터페이스를 구현할 수 있습니다.
 
  
public class MyGenericClass where T:IComparable { }

2. 기본 클래스 제약: 특정한 유형이 지정한 클래스를 기본 클래스(또는 이 클래스 자체)로 해야 이 일반 유형의 유형 매개 변수로 사용할 수 있음을 지적한다.
이러한 구속을 사용하려면 유형 매개변수의 다른 모든 구속 앞에 나타나야 합니다.
 
  
class MyClassy
where T : class
where U : struct
{
}

3.where 자구는 구조 함수 제약도 포함할 수 있다.new 연산자를 사용하여 형식 매개 변수의 실례를 만들 수 있습니다.그러나 형식 매개 변수는 구조 함수 제약 new () 의 제약을 받아야 합니다.새 () 제약은 컴파일러에게 알 수 있습니다. 제공하는 모든 종류의 매개 변수는 접근 가능한 무매개 변수 (또는 기본) 구조 함수를 가져야 합니다.예를 들면 다음과 같습니다.
 
  
public class MyGenericClass where T: IComparable, new()
{
// The following line is not possible without new() constraint:
         T item = new T();
}

new () 제약은where 자구의 마지막에 나타납니다.
4. 여러 유형의 매개 변수에 대해 각 유형의 매개 변수는 다음과 같은 where 자문을 사용합니다.
 
  
interface MyI { }
class Dictionary
where TKey: IComparable, IEnumerable
where TVal: MyI
{
public void Add(TKey key, TVal val)
{
}
}

5. 일반 방법의 유형 매개변수에 구속을 첨부할 수도 있습니다. 예를 들어,
 
  
public bool MyMethod(T t) where T : IMyInterface { }

위임과 메소드 둘 다에서 유형 매개변수 구속을 설명하는 구문은 동일합니다.
 
  
delegate T MyDelegate() where T : new()

좋은 웹페이지 즐겨찾기