2009-04-15 9 views
1

C#의 System.Delegate 또는 System.MulticastDelegate에서 상속하는 것은 불가능합니다. 그것은 표준 '런타임 관리'방법을 선언하는 한 MSIL에서 완벽하게 가능합니다. 그러나 형식에 'cil managed'메서드를 추가 할 때마다 다음과 같이 나타납니다.System.Delegate를 확장 할 수 있습니까?

System.TypeLoadException : 런타임에 구현 된 대리자 메서드에 대한 정의가 잘못되었습니다.

Delegate/MulticastDelegate를 확장 할 수 있습니까?

+0

호기심에서 벗어나서 Delegate 클래스에 어떤 것을 추가하여 확장 하시겠습니까? –

+0

Target 및 Method를 (IntPtr 대신) 문자열로 사용하는 생성자입니다. – Prankster

+0

다른 곳에서 똑같은 일을하는 정적 메서드를 사용하지 않는 이유는 무엇입니까? 나에게 아주 간단하게 들리 겠지만 코드를 유지 관리하는 사람에게는 덜 예기치 않게 들린다. –

답변

7

C#의 고유 한 사용자 지정 코드가 아닙니다. 섹션 C# 3.0 사양의 10.1.4에서 :

는 클래스 타입 의 직접 기본 클래스는 다음 유형 중 하나가 아니어야합니다 : System.Array, System.Delegate, System.MulticastDelegate, System.Enum, 또는 System.ValueType. 또한 일반 클래스 선언은 System.Attribute을 직접 또는 간접 기본 클래스로 사용할 수 없습니다.

그러나 대리자 형식을 만들 때마다 자동으로 MulticastDelegate에서 파생됩니다. ECMA-335에서

, 섹션 8.9.3 :

동안은, 대부분의 경우, 대표 단순히 사용자 정의 클래스의 다른 종류의 것으로 보인다, 그들은 통제 단단히 입니다. 메소드의 구현은사용자 코드가 아니라 VES에서 제공합니다. 대리자 형식 인 에 정의 할 수있는 유일한 추가 구성원 인 은 정적 또는 인스턴스 메서드입니다.

그것은 생성자를 금지하는 것처럼 들립니다. 저는 대신에 보통 타입의 정적 메서드를 사용합니다.

0

Rick Strahl의 post에서 다양한 동적 대리인 생성 방법을 비교하는 데 관심이 있습니다.

관련 문제