3

質問はそれほど単純ではありません:)。

基本的に、私が知る必要があるのは、メソッドのファミリーの任意のメソッドから返される配列に何が含まれるかということAttribute.GetCustomAttributes()です。

間違いなく、私が定義したすべての属性がそこにあります。しかし、彼らだけではありません。たとえば、のようなすべてのEntityFramework属性EdmScalarPropertyAttributeもあります。カスタムとして扱われない属性はどれですか?

4

1 に答える 1

6

構文から派生しSystem.Attributeて追加されたほとんどすべての属性がそこにあります。[AttributeName]それらのいくつかはOutAttributeoutキーワードのように、コンパイラ自体によって追加されることさえあります。

static「カスタム」という言葉は、メンバー/タイプの可視性、メソッドの可視性virtualなど、ランタイムに直接組み込まれている属性とは区別されますsealed

たとえば、Type.Attributesはタイプの列挙型TypeAttributesであるか、列挙型にMethodBase.Attributes対応しMethodAttributesます。それらは「カスタム」としてカウントされません。


[Serializable]メモリレイアウトに関して、いくつかの奇妙なコーナーケースがあります。

Essential C#の書き込み

System.SerializableAttributeただし、カスタム属性だけでなく、CILにはシリアル化可能なクラス用の特別なヘッダー表記があるという特徴の1つがあります。

..。

SerializableAttributeメタデータテーブル内のセットビットに変換されます。これによりSerializableAttribute、メタデータテーブルのビットまたはフィールドを設定する属性である疑似属性が作成されます。

于 2012-07-31T15:11:46.220 に答える