, 당신이 이런 식으로 뭔가를 보이는 것을 볼 수 있습니다 :
입니다
.class public sealed System.Action extends System.MulticastDelegate
{
.method public hidebysig specialname rtspecialname instance void .ctor(object 'object', native int 'method') runtime managed {}
.method public hidebysig newslot virtual instance void Invoke() runtime managed {}
.method public hidebysig newslot virtual instance class System.IAsyncResult BeginInvoke(class System.AsyncCallback callback, object 'object') runtime managed {}
.method public hidebysig newslot virtual instance void EndInvoke(class System.IAsyncResult result) runtime managed {}
}
, 생성자 (.ctor
), Invoke
, 및 BeginInvoke/EndInvoke
방법. 또한이 메소드에는 구현이 없으며 (메소드 본문은 비어 있음), runtime
으로 표시되어 있음을 알 수 있습니다.
runtime
키워드는 CLR에이 메서드가 CLR 자체에서 제공하는 구현을 필요로한다는 것을 CLR에 나타냅니다. 즉, 위임자의 구현은 CLR 자체 내에서 완전히 Magic입니다. 대리자 형식이로드 될 때 System.Delegate
에서 파생 된 CLR은 runtime
플래그를 알기 때문에 특정 대리자 형식에 대해 CLR 내부에서 해당 메서드의 구현을 만듭니다.
이러한 구현이 실제로 어떻게 생겼는지는 .NET 플랫폼, Mono 또는 다른 어떤 것이 든 실행중인 CLR에 달려 있지만 네이티브 코드에 직접있을 가능성이 있습니다.
컴파일러에서 대리자 형식을 컴파일하면 CLR에서 예상하는 패턴과 일치하는 이러한 메서드 스텁을 만들고이를 그대로 둡니다. 델리게이트가 실제로 작동하는 방법은 런타임에 달려 있습니다.
어떻게 생성됩니까? 코드는 C# 컴파일러에서 생성됩니다. 너는 무엇을 더 알 필요가 있니? –