コード付きのカスタム属性の非常に基本的な例を誰か説明してもらえませんか?
ベストアンサー1
まず、派生クラスを書きます。属性:
public class MyCustomAttribute: Attribute
{
public string SomeProperty { get; set; }
}
次に、この属性を使用して、任意のもの (クラス、メソッド、プロパティなど) を装飾できます。
[MyCustomAttribute(SomeProperty = "foo bar")]
public class Foo
{
}
最後にリフレクションを使用して取得します。
var customAttributes = (MyCustomAttribute[])typeof(Foo).GetCustomAttributes(typeof(MyCustomAttribute), true);
if (customAttributes.Length > 0)
{
var myAttribute = customAttributes[0];
string value = myAttribute.SomeProperty;
// TODO: Do something with the value
}
このカスタム属性を適用できるターゲットタイプを制限するには、属性の使用法属性:
/// <summary>
/// This attribute can only be applied to classes
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class MyCustomAttribute : Attribute
属性について知っておくべき重要な点:
- 属性はメタデータです。
- これらはアセンブリに組み込まれていますコンパイル時これは、プロパティをどのように設定するかという点で非常に重大な意味を持ちます。定数(コンパイル時に既知)の値のみが受け入れられます。
- カスタム属性を意味のあるものにし、使用する唯一の方法は、反射したがって、実行時にリフレクションを使用してそれらを取得してカスタム属性で装飾しない場合は、あまり効果は期待できません。
- 属性の作成時間は非決定的です。属性は CLR によってインスタンス化され、それを制御することができません。