質問はそれほど単純ではありません:)。
基本的に、私が知る必要があるのは、メソッドのファミリーの任意のメソッドから返される配列に何が含まれるかということAttribute.GetCustomAttributes()
です。
間違いなく、私が定義したすべての属性がそこにあります。しかし、彼らだけではありません。たとえば、のようなすべてのEntityFramework属性EdmScalarPropertyAttribute
もあります。カスタムとして扱われない属性はどれですか?
質問はそれほど単純ではありません:)。
基本的に、私が知る必要があるのは、メソッドのファミリーの任意のメソッドから返される配列に何が含まれるかということAttribute.GetCustomAttributes()
です。
間違いなく、私が定義したすべての属性がそこにあります。しかし、彼らだけではありません。たとえば、のようなすべてのEntityFramework属性EdmScalarPropertyAttribute
もあります。カスタムとして扱われない属性はどれですか?
構文から派生しSystem.Attribute
て追加されたほとんどすべての属性がそこにあります。[AttributeName]
それらのいくつかはOutAttribute
、out
キーワードのように、コンパイラ自体によって追加されることさえあります。
static
「カスタム」という言葉は、メンバー/タイプの可視性、メソッドの可視性virtual
など、ランタイムに直接組み込まれている属性とは区別されますsealed
。
たとえば、Type.Attributes
はタイプの列挙型TypeAttributes
であるか、列挙型にMethodBase.Attributes
対応しMethodAttributes
ます。それらは「カスタム」としてカウントされません。
[Serializable]
メモリレイアウトに関して、いくつかの奇妙なコーナーケースがあります。
Essential C#の書き込み:
System.SerializableAttribute
ただし、カスタム属性だけでなく、CILにはシリアル化可能なクラス用の特別なヘッダー表記があるという特徴の1つがあります。..。
SerializableAttribute
メタデータテーブル内のセットビットに変換されます。これによりSerializableAttribute
、メタデータテーブルのビットまたはフィールドを設定する属性である疑似属性が作成されます。