2009-11-12 3 views

답변

41

예, 물론 그렇게 할 수 있습니다. 정적 과부하 해결을 위해 object 매개 변수로 취급되며 정적으로 호출됩니다. 그 방법 안에서 당신이하는 일은 동적 일 것입니다. 예를 들어 :

using System; 

class Program 
{ 
    static void Foo(dynamic duck) 
    { 
     duck.Quack(); // Called dynamically 
    } 

    static void Foo(Guid ignored) 
    { 
    } 

    static void Main() 
    { 
     // Calls Foo(dynamic) statically 
     Foo("hello"); 
    } 
} 

은 "동적 인 오브젝트와 같은"성격은 단지 dynamic 매개 변수를 사용하여 하나의 단지 object 매개 변수 과부하 및 하나를 가질 수 없음을 의미합니다.

+0

이 게시물에 대단히 감사합니다. – Darren

+0

ChrisB (http://blogs.msdn.com/b/cburrows/archive/2010/04/01/errata-dynamic-conversions-and-overload-resolution.aspx)가이 업데이트 된 기사를 올바르게 이해하고 있다면 이 동작이 변경된 것 같습니다. 호출과 같은 사운드는 항상 런타임에 결정된 매개 변수의 유형에 따라 과부하가 선택된 상태에서 동적으로 전달됩니다. – BitMask777

+2

@ BitMask777 : * 인수 * (또는 대상) 중 하나가 동적 인 경우에만. 그래서 내 대답의 코드에서'Foo ("hello")'는 동적 인수를 갖지 않으므로'Foo (dyanmic)'는 정적으로 바인딩됩니다. –

2

네, 그렇게 할 수 있습니다. C# 4.0 사양에 명시된 같이 유형이 예상되는 곳, 문법은 dynamic을 지원하도록 확장된다

유형 :
            ...
          dynamic

여기에는 물론 매개 변수 정의가 포함됩니다.

0

예; 예를 들어

http://blogs.msdn.com/cburrows/archive/2008/11/14/c-dynamic-part-vi.aspx

크리스 '다른 블로그

. 또는 VS2010 Beta2를 들고 시도해보십시오.

+0

이 문서는 매우 비효율적 인 후기 바인딩을 의미합니다. 강력한 타이핑은 친구입니다! –

+1

@David : DLR의 역동적 인 동작은 매우 능률적 일 정도로 능률적으로 수행됩니다. 예, 늦은 시각이지만 예상 한만큼 비효율적이지 않습니다. –

관련 문제