2013-07-06 5 views
9

다음 코드에서 나는 "S : new()"부분을 의미하는 것을 모른다. Google에서 더 많은 정보를 찾을 수있는 키워드는 무엇입니까?의미 의미 S : new() in C#

public virtual void Print<S, T>() 
     where S : new() 
    { 
     Console.WriteLine(default(T)); 
     Console.WriteLine(default(S)); 
    } 
+1

유형 매개 변수에 대한 제약 조건을 검색하십시오. 여기 링크입니다 http://msdn.microsoft.com/en-us/library/d5x73970.aspx – qwr

+6

중복의 [C# 코드 혼란의 어디 조항] (http://stackoverflow.com/q/5461963), 발견 SO를 검색하여 [\ [C# \] generic where new] (http://stackoverflow.com/search?q=%5Bc%23%5D+generic+where+new). 또한, [new()는 [where T : new()'] (http://stackoverflow.com/q/1085434)에서 무엇을하는지에 대해 [관련 질문] 사이드 바에서 보여줍니다. –

답변

16

new() 제약은 특정 제네릭 매개 변수가 기본 생성자 (전. 전자. 매개 변수가없는 생성자)를 가질 필요가 있다는 것을 의미한다.

일반적으로 리플렉션/Activator.CreateInstance를 사용하지 않고 일반 매개 변수 유형의 새 인스턴스를 안전하게 입력 할 수 있도록하기위한 것입니다. 예를 들어

: 자세한 내용은

public T Create<T>() where T : new() 
{ 
    // allowed because of the new() constraint 
    return new T(); 
} 

, http://msdn.microsoft.com/en-us/library/sd2w2ew5%28v=vs.80%29.aspx을 확인하십시오.

Google 검색 용어로는 "C# new() 제약 조건"을 사용해 보겠습니다.

+1

정식 이름은 _constructor constraint_이므로 Google에서도 할 수 있습니다. _ Constraint_가 가장 중요한 단어입니다. 'T'가 값 타입이된다면,'new T();'는 실제 인스턴스 생성자를 호출하지 않습니다. 그것은 값 타입을 위해'default (T)'와 같은 값을 생성합니다. 이런 이유로 값 유형 제약과 생성자 제약을 결합하는 것은 허용되지 않으므로 불법입니다 :'where T : struct, new()'(중복으로 간주). 'T'가 참조 형인 경우,'default (T)'는'null' 참조를 주지만'new T();'는 실제 생성자를 호출합니다. –

+0

미리 정의 된 정수 유형과 열거 형을 비롯한 모든 값 유형은 생성자 제약 조건을 충족시킵니다. 참조 유형은 ** 추상적이고 ** public ** ** 제로 - 파라미터 인스턴스 생성자를 갖는 경우에만이를 만족시킵니다. (추상적 인 클래스는'public' 생성자를 가지고 있지 않아야합니다.) –