제네릭 정의의 where 절은 제네릭 형식, 메서드, 대리자 또는 로컬 함수의 형식 매개 변수에 대한 인수로 사용되는 형식에 대한 제약 조건
을 지정.
제약 조건은 인터페이스, 기본 클래스를 지정하거나 제네릭 형식을 참조, 값 또는 관리되지 않는 형식으로 요구할 수 있으며, 형식 인수에서 갖추고 있어야 하는 기능을 선언한다.
위의 내용은 레퍼문서내용 긁어온거라. 생각없이 읽으면 먼소린지 모르는데
즉, 요약하자면 특정조건을 갖춘 매개변수만 받겠다는 의미.
where T : 제약조건
#사용법(Usage)
예를 들어 형식 매개 변수 T가 IComparable
//형식 매개 변수 T가 IComparable<T> 인터페이스를 구현하도록 제네릭 클래스 MyGenericClass를 선언
public class AGenericClass<T> where T : IComparable<T> { }
//이런 식으로 제약조건 건다.
public class UsingEnum<T> where T : System.Enum { }
public class UsingDelegate<T> where T : System.Delegate { }
public class Multicaster<T> where T : System.MulticastDelegate { }
형식 매개변수가 여러 개이면 각 형식 매개변수에 하나의 where절 사용
public interface IMyInterface { }
namespace CodeExample
{
class Dictionary<TKey, TVal>
where TKey : IComparable<TKey>
where TVal : IMyInterface
{
public void Add(TKey key, TVal val) { }
}
}
-
참고 케이스
//where T : new() -> T는 매개변수가 없는 생성자를 가진 타입이어야 한다. delegate T MyDelegate<T>() where T : new();
#유니티에서의 활용
- 싱글톤 만들 떄 사용 되기도 한다.
(여러 방법중 하나.. 나는 그냥 static class로 만드는게 심플한거 같다.)
using UnityEngine;
public abstract class Singleton<T> where T : class {
protected static T instance = null;
public static T Instance
{
get
{
if (instance == null)
{
instance = System.Activator.CreateInstance (typeof(T)) as T;
}
return instance;
}
}
}