문제

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 (의견 참조)

그러나 모든 반사 비를 풀지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top