2010-11-21 11 views
13

WCF RIA Services에는 AuthenticationBase 클래스가 있습니다.new()는 무엇을 의미합니까?

// assume using System.ServiceModel.DomainServices.Server.ApplicationServices 

public abstract class AuthenticationBase<T> 
    : DomainService, IAuthentication<T> 
    where T : IUser, new() 

new()이 코드에 무엇을 의미 하는가 다음과 같이 클래스 정의는?

답변

21

그것은 new constraint입니다.

Tabstract이 아니어야하고 AuthenticationBase<T> 클래스의 generic type argument로 사용하기 위해 public 매개 변수가 constructor를 노출해야 함을 지정합니다.

+2

십대 위닝 교정 : 유형에 제네릭 유형 * 인수 *로 사용하기 위해 이러한 기능이 있어야합니다. 'T'는 제네릭 타입 * 매개 변수입니다. 그러나 실제로 사용되는 타입 (예 :'object','int')은 타입 인자입니다. –

+1

@Jon, 정식으로 고맙습니다. :) –

7

new() 키워드를 사용하려면 해당 클래스에 기본 생성자가 정의되어 있어야합니다. 키워드가 없으면 class new()를 컴파일하려고 시도하지 않습니다.

예를 들어 다음 스 니펫은 컴파일되지 않습니다. 이 함수는 매개 변수의 새 인스턴스를 반환하려고 시도합니다.

public T Foo <T>() 
// Compile error without the next line 
// where T: new() 
{ 
    T newInstance = new T(); 
    return newInstance; 
} 

이것은 일반적인 유형 제약 조건입니다. 이 MSDN article을 참조하십시오.

5

일반 매개 변수 T을 채우는 데 사용되는 형식에는 공용 및 매개 변수없는 생성자가 있어야 함을 의미합니다. 형식이 이러한 생성자를 구현하지 않으면 컴파일 타임 오류가 발생합니다. new() 일반적인 제한이 가해지면

,이 예에서와 같이, 즉, 지정된 유형의 새로운 인스턴스를 생성하는 new T();을 호출하는 클래스 또는 메소드 (이 경우 AuthenticationBase<T> 클래스)를 허용한다. 반향이없는 다른 방법은 없습니다 (여기에는 System.Activator을 사용하여 일반 유형의 새 객체를 생성하는 것이 포함됩니다.)