我打算不传递任何参数给属性,这种做法可行吗?
class MyAtt : Attribute {
string NameOfSettedProperty() {
//How do this? (Would be MyProp for example)
}
}
class MyCls {
[MyAtt]
int MyProp { get { return 10; } }
}
我打算不传递任何参数给属性,这种做法可行吗?
class MyAtt : Attribute {
string NameOfSettedProperty() {
//How do this? (Would be MyProp for example)
}
}
class MyCls {
[MyAtt]
int MyProp { get { return 10; } }
}
使用 .NET 4.5 中的 CallerMemberNameAttribute:
public CustomAttribute([CallerMemberName] string propertyName = null)
{
// ...
}
属性是应用于类型成员、类型本身、方法参数或程序集的元数据。为了访问元数据,您必须拥有原始成员本身,例如使用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; }
}
你不能在属性类本身内部完成它。但是,你可以编写一个方法,该方法接受一个对象并获取使用该属性的该对象属性列表(如果有)。使用此API来实现:http://msdn.microsoft.com/en-us/library/ms130869.aspx