편집 : 잘못된 용어 상자를 캐스팅으로 변경했습니다. I 유형 조치 또는 Func을 새로운 대표가 위임의 형태로 주조한다을 작성하는 경우런타임시 일반 오브젝트를 동적으로 캐스팅하는 C#
:
나는 다음과 같은 문제가있다.
var @delegate = Delegate.CreateDelegate(type, @object, methodInfo);
하지만 일반 클래스의 경우 올바른 캐스팅 된 개체가 필요합니다.
다음 예제 고려 : 이것은 주조 객체 (@delegate)의 유형은 이후
class Example<T> {
Type GenericType() {
return typeof(T);
}
}
static Example<T> Create<T>(T @delegate) {
return new Example<T>();
}
Example.Create(@delegate).GenericType();
이
는 형식으로 위임을 반환합니다.하나 개의 솔루션과 같이 대리자를 투영 할 수 있습니다 :
if(@delegate is Action)
Example.Create((Action)@delegate).GenericType();
그러나 Delegate.CreateDelegate는 액션이나 Func을 대표을 만들 수 있기 때문에
, 모든 변화를 확인하는 것은 불가능합니다.일반 클래스를 변경할 수 없으므로 대리자를 캐스팅해야합니다.
나는 내 문제를 설명 할 수 있었으면 좋겠다. 나는 영어 원어민이 아니다 ...
편집 : 문제는 typeof (T)가 "실제"유형의 객체를 반환하지 않는다는 것입니다. 그러나 나는 해결책이 없다는 것을 두려워합니다.
정말 위임자와 함께 작업해야합니까? @delegate 및 @object 사용을 중지하십시오. 예약 된 이름을 shortcuting한다는 것을 알기 전에 잠시 쳐다 보았습니다. – Euphoric
이것은 매우 나 빠졌습니다 시작합니다. 값 형식 값만 boxed되고 대리자 형식은 참조 형식이므로 수행하려는 작업이 확실하지 않지만 Delegate.DynamicInvoke() 메서드를 사용하여 런타임에 바인딩 된 대리자 개체를 호출하십시오. –
C#에서 "delegate"또는 "object"와 같은 바로 가기를 사용하면 클래스가 낙타로 변환되어야하므로 내 복수 {^ 예, 위와 같은 대리자와 작업해야합니다. ( – jhlllnd