C#4의 동적 키워드가 확장 방법을 지원합니까?
-
06-07-2019 - |
문제
나는 대화를 듣습니다 ~에 대한 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가 배송되기 전에 요청되었으므로 미래 시제로 표현 된 이유입니다.
해결책
동적 조회는 확장 방법을 찾을 수 없습니다. 확장 방법이 적용되는지 여부는 통화의 정적 컨텍스트 (즉 조항을 사용하는 경우)에 따라 다르며,이 컨텍스트 정보는 현재 페이로드의 일부로 유지되지 않습니다.
다른 팁
나는 적어도 흥미로운 것을 발견합니다 ...
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();
제휴하지 않습니다 StackOverflow