4

MSDN ドキュメント: MemberInfo.GetCustomAttibutes Method (Type, Boolean)のコメントには次のように記載されています。

このメソッドは、プロパティとイベントの継承パラメーターを無視します。プロパティとイベントの属性の継承チェーンを検索するには、Attribute.GetCustomAttributes メソッドの適切なオーバーロードを使用します。

これは基本的に、この実装の 2 番目のパラメーター ( ) がイベント メンバープロパティ メンバーbool inheritに対して無視されることを意味します。ただし、この操作のさまざまな呼び出しは行いません。Attribute.GetCustomAttributes(MemberInfo,Type,bool)

私を困惑させるのは、このデザインです。

2 つの形式のメンバー型で、継承属性を勝手に無視しているように見えるのはなぜですか?

誰かがこれに光を当てることができれば、私は非常に感謝しています.

4

1 に答える 1

1

これは間違いなく混乱します。厳密な答えは、プロパティとイベントは継承されないため、inheritedパラメーターは意味をなさないということです。参照はECMA 335 CLI 仕様セクション 8.10.3 です。

基本的に、プロパティとイベントは、CLI を対象とするツールで使用するためのメタデータの構成要素であり、VES 自体では直接サポートされていません。したがって、名前の隠蔽、継承などのルールを決定するのは、ソース言語コンパイラとリフレクション ライブラリ (パーティション IV を参照) の仕事です。ソース コンパイラは、イベントまたはプロパティ自体ではなく、イベントおよびプロパティによって指定されたメソッドに直接アクセスする CIL を生成する必要があります。

仕様は、コンパイラがこれをどのように実装すべきかについて何も述べていません。virtualC# の場合、プロパティは個別の getter および setter メソッドを介して実装され、これらはおよびで宣言できますoverride。同様に、イベントには個別の addhandler メソッドと removehandler メソッドがあります。

したがって、簡単な答えは、プロパティとイベントは厳密にメタデータであり、仕様に従って実装されていないということです。そのため、メソッドと同じ意味で継承することはできません。

于 2010-06-23T17:50:52.910 に答える