質問はそれほど単純ではありません:)。
基本的に、私が知る必要があるのは、メソッドのファミリーの任意のメソッドから返される配列に何が含まれるかということ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、メタデータテーブルのビットまたはフィールドを設定する属性である疑似属性が作成されます。