3

C#のSystem.DelegateまたはSystem.MulticastDelegateから継承することはできません。標準の「ランタイム管理」メソッドを宣言する限り、MSILでそれを行うことは完全に可能です。ただし、タイプに「cilmanaged」メソッドを追加するたびに、次のようになります。

System.TypeLoadException:実行時に実装されたデリゲートメソッドの定義が正しくありません。

Delegate / MultimediaDelegateを拡張することは可能ですか?

4

2 に答える 2

10

C#では、独自のカスタムコードではありません。C#3.0仕様のセクション10.1.4から:

クラス型の直接基本クラスは、、、、、、、またはのいずれの 型System.Arrayであってはなりません。さらに、ジェネリッククラス宣言は 、直接または間接の基本クラスとして使用できません。System.DelegateSystem.MulticastDelegateSystem.EnumSystem.ValueTypeSystem.Attribute

ただし、デリゲートタイプを作成するたびに、はから自動的に派生しMulticastDelegateます。

ECMA-335、セクション8.9.3から:

ほとんどの場合、デリゲートは単に別の種類のユーザー定義クラスのように見えますが、厳密に制御されています。メソッドの実装は、ユーザーコードではなく、VESによって提供されます。デリゲート型で定義できる追加のメンバーは、静的メソッドまたはインスタンスメソッドのみです。

コンストラクターを禁止しているようです。個人的には、代わりに通常の型で静的メソッドを使用します。

于 2009-04-15T16:13:22.730 に答える
3

Rick Strahl による次の投稿を見て、動的デリゲート作成のさまざまな方法を比較することに興味があるかもしれません。

于 2009-04-15T18:57:44.753 に答える