문제

나는 대화를 듣습니다 ~에 대한 C#4'에스 dynamic 키워드와 궁금합니다 ...이 기능은 다른 .NET 기능과 직교적일까요? 예를 들어 확장 방법을 지원할 것인가?

public static class StrExtension {
    public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
x.twice(); // will this work?

메모: 이 질문은 C#4가 배송되기 전에 요청되었으므로 미래 시제로 표현 된 이유입니다.

도움이 되었습니까?

해결책

로부터 "C# 4의 새로운 기능"Word Doc:

동적 조회는 확장 방법을 찾을 수 없습니다. 확장 방법이 적용되는지 여부는 통화의 정적 컨텍스트 (즉 조항을 사용하는 경우)에 따라 다르며,이 컨텍스트 정보는 현재 페이로드의 일부로 유지되지 않습니다.

다른 팁

나는 적어도 흥미로운 것을 발견합니다 ...

public static class StrExtension
{
   public static string twice(this string str) { return str + str; }
}

...
dynamic x = "Yo";
StrExtension.twice(x);

그럼에도 불구하고 컴파일러가 컴파일 타임에 올바른 확장 방법을 찾을 수 있다면 런타임을 찾을 확장 방법 세트를 패키지 할 수없는 이유를 알 수 없습니까? 비회원 방법의 V-Table과 같습니다.

편집하다:

이것은 멋지다... http://www2.research.att.com/~bs/multimethods.pdf

파일에 네임 스페이스가 포함 된 것에 따라 작동 할 수 없으며, 내가 아는 한, MSIL은 파일과 네임 스페이스를 포함하여 전혀 모릅니다.

확장 방법을 만들 수 있습니다 물체 그리고 그것을 a에 할당하십시오 동적:

public static void MyExt(this object o) {
    dynamic d = o;
    d.myProp = "foo";
}

그리고 이것을 다음과 같이 부릅니다.

ClassWithMyProp x;
x.MyExt();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top