実行時に属性コンストラクターはいつ実行されますか?
-
03-07-2019 - |
質問
属性の複雑さに関する詳細な参照を見つけようとしています。助けていただければ幸いです。
この時点で、実行時に属性コンストラクタが実行されるのはいつかを具体的に知りたいですか?
- クラスを超えている場合
- プロパティの場合
- メソッドの場合
ありがとう。
解決
コンストラクターは、型またはMemberInfoでGetCustomAttributes()を呼び出すと呼び出されます。
他のヒント
ノルム(C#2.0バージョンの17.3.2)を読むことは規定されていません。メタタダからインスタンスに変換する方法のみです。
そのため、異なる実装でテストする必要がある場合があります。指定されていない場合、異なる解釈にバインドされるためです。
確信できる唯一のことは、それが必要になる前に呼び出されることです。コンストラクターが呼び出される正確な時間は定義されていません。
とにかく、振る舞いは指定されていないので、現在の実装によって構造が呼び出されるたびに依存すべきではありません。
属性は、メタデータまたは型に関する情報を格納する装飾です。 .Netフレームワークは、この種の情報を大いに活用して、インスタンスの作成時に追加の処理を行います。
属性は、たとえばType.GetCustomAttributes()など、他のクラスから要求された場合にのみ構築されます。そのため、独自の属性を作成して、カスタム属性を要求することもできます。
public class MyOwnAttribute: Attribute {}
/ *別のクラスのある時点で* /
void CheckIfClassIsDecoratedWithMyOwnAttribute()
{
var instance = new MyClass();
if (instance.GetType().GetCustomAttributes(typeof(MyOwnAttribute)))
{
//do whatever you want
}
}
所属していません StackOverflow