2012-03-14 3 views
2

다른 형식의 인스턴스를 만들 수있는 동적 메서드를 만들었지 만 위에서 설명한 오류가 컴파일 타임에 발생하는 이유를 모르거나 지정된 형식으로 반환 값을 다시 캐스팅해야합니까? ?GetInstance <T>() '을 사용에서 유추 할 수 없습니다. 명시 적으로 형식 인수를 지정하십시오.

internal static T GetInstance<T>() where T:new() 
{ 
    return new T(); 
} 

http://msdn.microsoft.com/en-us/library/0hcyx2kd.aspx

편집이 :

비록, 내가 왜 이해하지

internal static T GetInstance<T>() 
    { 
     dynamic obj = Activator.CreateInstance(typeof(T)); 
     return obj; 
    } 

    private Foo f = GetInstance<Foo>(); 
+1

왜 '동적'입니까? 당신은 아마도'return (T) Activator.CreateInstance (typeof (T));'가 필요 하겠지요. 그러나 함수에서 오는 에러는 어디입니까? 그것을 부르는 선? – Rup

+0

좋은 질문, 실제로 다른 속성을 설정해야합니다. – BreakHead

+0

그리고 컴파일시 오류가 발생합니다 – BreakHead

답변

7

왜 그냥 MSDN은 다음과 인, 권장 무엇을 사용하지 마십시오 심지어이 방법을 갖고 싶습니까? 이 유형의 매개 변수로 FooGetInstance<T>()를 호출 할 경우 푸 매개 변수가없는 생성자가 있어야하기 때문에 대신 var x = GetInstance<Foo>();를 호출

, 당신은 단지 var x = new Foo();을 할 수있는 (또는 내가 뭔가 실종?).

+0

Jaaco +1에 감사하지만 왜 T : new()입니까? – BreakHead

+0

더 빠르고 똑같은 - CreateInstance는 동적 인 매개 변수를 사용할 수 있습니다.하지만 그걸 전달하지 않으면, 새로운 것은 창조보다 낫습니다. – TomTom

+0

@BreakHead It 's Jaakko :) "new()"제약 조건이 없으면 "new T()"를 수행 할 수 없습니다. 모든 제약 조건은 'T'에 매개 변수없는 생성자가 있음을 보장합니다. – flai