나는 바퀴가 어떻게 돌아가는지를 이해할 수 있도록 부분적으로 바퀴를 새롭게 만들었다.유형이 Type으로 컴파일 된 생성자 표현하기
유형의 기본 생성자를 컴파일하고 반환하기 위해이 일반 함수를 고려하십시오.
public static Func<TConcrete> Creator<TConcrete>()
{
// All checking removed for brevity
var ctor = typeof(TConcrete).GetConstructor(new Type[0]);
var lambda = Expression.Lambda<Func<TConcrete>>(Expression.New(ctor));
return lambda.Compile();
}
저는 이것이 전달 된 유형을 인스턴스화하는 데 사용할 수있는 훌륭한 형식화 된 대리자를 반환한다고 생각합니다.
다른 유형의 집합에 대해이 작업을 수행하는 기능을 원한다면 어떻게할까요? 난 당신이 ????
에서 볼 수 있듯이 내가 붙어있어 어디
public static IEnumerable<Delegate> Creators(IEnumerable<Type> types)
{
foreach (var type in types)
{
var ctor = type.GetConstructor(new Type[0]);
var lamda = Expression.Lambda<Func<????>>(Expression.New(ctor));
yield return lambda.Compile();
}
}
이는 ...의 라인을 따라 thiking했다. 이 방법이 있습니까 아니면 내 접근법에 결함이 있습니까?
'Creators' 메서드를 호출하고 반환 된 델리게이트를 사용하는 코드는 어떻게 생겼습니까? – dtb
@dtb, 그 코드는 실제로 존재하지 않는다. 내 프로그램은 실제로 인터페이스와 구체적인 구현 간의 연관성을 전달하기 위해 IEnumerable>을 사용하는 함수를 가지고 있지만, 나는 실제 질문에 불필요하다고 생각했다. –
Jodrell