属性にパラメーターを渡さずにこれを行います!出来ますか?
class MyAtt : Attribute {
string NameOfSettedProperty() {
//How do this? (Would be MyProp for example)
}
}
class MyCls {
[MyAtt]
int MyProp { get { return 10; } }
}
属性は、型のメンバー、型自体、メソッドパラメーター、またはアセンブリに適用されるメタデータです。メタデータにアクセスするには、ユーザーGetCustomAttributes
などの元のメンバー自体、つまりType
、PropertyInfo
、FieldInfo
などのインスタンスが必要です。
あなたの場合、実際にはプロパティの名前を属性自体に渡します:
_public CustomAttribute : Attribute
{
public CustomAttribute(string propertyName)
{
this.PropertyName = propertyName;
}
public string PropertyName { get; private set; }
}
public class MyClass
{
[Custom("MyProperty")]
public int MyProperty { get; set; }
}
_
.NET 4.5から CallerMemberNameAttribute を使用:
public CustomAttribute([CallerMemberName] string propertyName = null)
{
// ...
}
属性クラス自体の中でそれを行うことはできません。ただし、属性を使用するオブジェクトのプロパティ(存在する場合)のリストをオブジェクトが取得するメソッドをできます。このAPIを使用してそれを実装します: http://msdn.Microsoft.com/en-us/library/ms130869.aspx