8

インターフェイスを実装するものは、メソッドICustomAttributeProviderを介して適用されたカスタム属性を取得できるようにしますGetCustomAttributes。私が理解しているように、カスタム属性は基本的に特別なクラス (「属性」で終わり、Attributeクラスを拡張する) であり、適切な構文を使用してメソッドやクラスなどに適用するために作成されます ([FooAttribute]メソッド/クラス/などの直前) . たとえば、C# の場合)。しかし、それがカスタム属性である場合、カスタム属性とは何でしょう? 以前は、.NET にバンドルされている属性はカスタムではないと考えていましたが、.NET フレームワークにとって非常に重要な のGetCustomAttributesような属性を返します。System.ThreadStaticAttribute

非カスタム属性のようなものはありますか、それとも「カスタム属性」は単なるトートロジーですか?

4

3 に答える 3

6

から派生するものAttributeはすべてカスタム属性です。

「属性」は総称です。現実世界のオブジェクトには無数の属性があります。クラス、メンバー、パラメーターにはすべて、名前、型、アクセサー、メンバー数、継承情報など、記述できる属性があります。

カスタム属性とは、私たちが追加するものです。つまり、関連付けて説明するために使用したいが、本質的ではない側面です。

于 2012-11-14T21:39:50.393 に答える
2

ウィキペディアを参照してください。

開発者は、属性を介してコードにメタデータを追加できます。カスタム属性と疑似カスタム属性の 2 種類の属性があり、開発者にとってこれらは同じ構文を持ちます。コード内の属性は、メタデータを生成するためのコンパイラへのメッセージです。CIL では、継承修飾子、スコープ修飾子、およびオペコードでもストリームでもないほとんどすべてのものなどのメタデータも属性と呼ばれます。

メタデータの拡張に関する CLI 仕様も参照してください。「カスタム」属性という用語が参照されています (例: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335 の I.9.7. pdf )

于 2012-11-14T21:40:19.433 に答える
2

以下、関係あるかわかりませんが、

var a = typeof(string).Attributes;

というフラグ列挙型の値を取得しますTypeAttributes。たぶん、これらのフラグはタイプの「非カスタム」属性ですか?

于 2012-11-14T22:01:11.713 に答える