문제

메소드를 호출 할 때 존재하지 않을 수도있는 경우 사용은 무엇입니까?

그것은 당신이 동적 객체에서 메소드를 동적으로 생성 할 수 있다는 것을 의미합니까?

이것의 실질적인 사용은 무엇입니까?

도움이 되었습니까?

해결책

실제로 방법을 동적으로 만들 수는 없지만 구현을 얻을 수 있습니다. IDynamicMetaObject (종종 확장하여 DynamicObject) 응답 마치 방법이 존재하는 것처럼.

사용 :

  • 약한 API (예 : 사무실)로 COM 개체에 대한 프로그래밍
  • Ruby/Python과 같은 동적 언어로 호출
  • 잠재적으로 "탐색 가능한"개체 만들기 - XPath와 같은 쿼리를 상상하지만 메소드/속성 호출을 통해 예를 들어 document.RootElement.Person[5].Name["Attribute"]
  • 의심 할 여지없이 우리가 아직 생각하지 않은 더 많은 것들 :)

다른 팁

우선, 당신은 지금 그것을 사용할 수 없습니다. 그것은 C#4의 일부이며, 향후 언젠가 출시 될 예정입니다.

기본적으로, 그것은 런타임까지 속성을 알지 못하는 객체를위한 것입니다. 아마도 그것은 com 객체에서 나옵니다. 아마도 그것은 당신이 설명하는 것처럼 "파리 객체의 정의"일 것입니다 (아직 또는 계획된 시설을 만들 수있는 시설이 있다고 생각하지는 않지만).

컴파일러가 모르는 메소드를 호출 할 수 있고 런타임이 호출 방법을 알아내는 것을 제외하고는 System.Object와 같습니다.

내가 생각할 수있는 두 가지 큰 것은 오리 타이핑과 JavaScript 및 Python과 유사한 응용 프로그램에서 C#을 스크립팅 언어로 사용하는 기능. 마지막으로 나를 조금 찢어 버립니다.

그것을 단순화 된 형태의 반사로 생각하십시오. 대신 :

object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });

당신은 이것을 얻습니다 :

IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);

나는 여러 역동적 인 ORM 프레임 워크가 작성되는 것을 본다. 아니면 직접 쓰십시오.

나는 Jon Skeet에 동의합니다. 당신은 물체를 탐색하는 흥미로운 방법을 볼 수 있습니다. 어쩌면 jQuery와 같은 선택기가있을 수 있습니다.

COM을 호출하고 동적 언어를 호출합니다.

루비 같은 누락 _method를 수행 할 수있는 방법이 있는지 기대하고 있습니다.

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