역동적이고 어색한 반사로 더 이상?
-
03-07-2019 - |
문제
C# 4.0 소개 dynamic
런타임을 찾는 키워드.
이것은 우리가 더 이상 어색한 반사가 필요하지 않다는 것을 의미합니까? 만약 그렇다면, 당신은 그것의 예를 표시 할 수 있습니까?
해결책
우리는 여전히 반사가 있습니다. 일반 CLR 객체에 대해 '동적'을 사용하면 반사 기반 디스패처를 호출합니다.
그래서 - 우리는 여전히 반성을 할 수 있지만, 더 쉽게 할 것입니다.
예는 다음과 같습니다.
// Via 'dynamic'
dynamic dx = GetSomeCLRObject();
dx.DoSomething();
dx.SomeMember = 2;
// Via Reflection
object x = GetSomeCLRObject();
Type xt = x.GetType();
MemberInfo DoSomethingMethod = xt.GetMethod("DoSomething");
DoSomethingMethod.Invoke(x, null);
PropertyInfo SomeMemberProperty = xt.GetProperty("SomeMember");
SomeMemberProperty.SetValue(x, 2);
나는 당신에 대해 모르지만 나는 전자를 좋아합니다. =))
이 두 경우 모두, 나는 컴파일 타임 점검, 지능, IDE 지원도 없지만 전자의 사례는 후자보다 훨씬 표현력이 있습니다.
다른 팁
동적 디스패치는 반사의 가능한 사용 일뿐입니다. 구조에 대한 수업을 조사하고, 그 구조에 대한 정보를 얻고, 어떤 형태로 어떤 형태로 시각화하거나, 회원에 동적으로 액세스하지 않고 어떤 식 으로든 행동 해야하는 많은 이유가 있습니다. 반사는 여기에 있습니다. :)
동적 키워드의 예를 원한다면 다음은 PDC의 비디오입니다 의 남자 자신 그것에 대해 이야기합니다 (및 기타 C# 4.0 관련).
Dynamic은 이름으로 만 알려진 방법으로 문제를 해결하는 데 먼 길을 갈 것이며, 그 이름은 컴파일 시간에 알려지고 고정되어 있지만 물론 이러한 방법은 유형을 제어하면 인터페이스로 표현 될 수 있습니다.
사례가 있습니다 dynamic
전혀 도움이되지 않습니다 :
- 컴파일 시간에 메소드 이름이 알려지지 않은 경우 (예 : 구성 / 사용자 입력에서로드 됨)
- 객체 생성
- 아마도 일부 제네릭 시나리오 일 수도 있습니다
내가 보는 가장 큰 용도 dynamic
이다:
- com interop (분명히)
- 일반 운영자 지원
- 공통 인터페이스가없는 곳에 오리 입력
- DLR Interop (의견 참조)
그러나 모든 반사 비를 풀지는 않습니다.