다음 코드에는 Foo()
인스턴스 메서드를 호출하는 정적 메서드가 있습니다 Bar()
.
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
오류 *없이 컴파일되지만 런타임에 런타임 바인더 예외가 생성됩니다. 이러한 메서드에 대한 동적 매개 변수를 제거하면 예상대로 컴파일러 오류가 발생합니다.
그렇다면 왜 동적 매개 변수가 있으면 코드를 컴파일 할 수 있습니까? ReSharper도 오류로 표시하지 않습니다.
편집 1 : * Visual Studio 2008에서
편집 2 :sealed
하위 클래스에 정적 Bar(...)
메서드 가 포함될 수 있기 때문에 추가되었습니다 . 봉인 된 버전도 런타임에 인스턴스 메서드 이외의 메서드를 호출 할 수없는 경우 컴파일됩니다.
dynamic
정말로 필요하지 않는 한 사용 하지 말아야하는 또 다른 예입니다 .