2016-10-19 5 views
1

나는 이런 식으로 구현되는 추상 클래스가 있습니다. 일반 인수 <T>IEntity 인터페이스를 구현하는 클래스 여야합니다.기본 클래스 일반 인수 해명

"new()"? 란? 주어진 클래스의 새 인스턴스 여야합니까? 그 목적은 무엇입니까? 참고로 모두 <T><U>

고맙습니다. 에서

+0

답변 해 주셔서 감사합니다. 매우 도움이됩니다. –

답변

1

new()는 형식 인수가 공공 파라가 있어야 지정하는 제약 조건은 다음과 같습니다 뭔가처럼 무 미터 생성자. 제네릭 형식 제약 조건에 대한 자세한 내용은 MSDN을 참조하십시오.

3

docs :

".. 새로운 제약이 제네릭 클래스 선언에서 모든 유형의 인수가 공공 매개 변수가없는 생성자가 있어야합니다, 유형 추상적 할 수없는 새로운 제약 조건을 사용하도록 지정"

나는 위의 설명이 충분하다고 생각하기 때문에 이것에 더 많이 추가 할 필요가 없습니다.

3

new()new constraint이라고하며 형식 인수에는 공용 매개 변수없는 생성자가 필요합니다.

당신이 명시 적으로 전달 된 유형을 알지 못하고, 클래스 내부 제네릭 형식의 인스턴스를 만들 수 있다는 것입니다 사용의 이점 예를 들어

:.

public PersonEntity : IEntity 
{ 
    // public parameterless constructor 
    public PersonEntity() 
    { 
    } 
} 

public abstract class BaseImplementation<T, U> : IHistory<T> 
    where T : class, IEntity, new() 
    where U : DbContext, new() 
{ 
    public T CreateEntity() 
    { 
     var entity = new T(); 
     // entity will be the type passed to `T` when instantiating `BaseImplementation` 
    } 
} 

그리고 사용이 될 것이다

public class PersonImpl : BaseImplementation<PersonEntity, DataContext> 
{ 
    public void Method1() 
    { 
     var entity = CreateEntity(); 
     // entity is typeof(PersonEntity); 
    } 
}