从接口方法和类方法获取属性
什么是方法重载时从类方法和接口方法获取属性值的最佳方法?
例如,我想知道在下面的示例中,带有一个参数的Get方法具有两个属性,值为5和“any”,而另一个方法具有值为7和“private”的属性。
public class ScopeAttribute : System.Attribute
{
public string Allowed { get; set; }
}
public class SizeAttribute : System.Attribute
{
public int Max { get; set; }
}
public interface Interface1
{
[SizeAttribute( Max = 5 )]
string Get( string name );
[SizeAttribute( Max = 7 )]
string Get( string name, string area );
}
public class Class1 : Interface1
{
[ScopeAttribute( Allowed = "any" )]
public string Get( string name )
{
return string.Empty;
}
[ScopeAttribute( Allowed = "private" )]
public string Get( string name, string area )
{
return string.Empty;
}
}
我发现的唯一方法是检查类实现的接口,并检查这些接口上属性的属性(如果存在),例如(注意 - 总体方法已经过测试,但代码本身是临时的,可能无法编译:)
static bool HasAttribute (PropertyInfo property, string attribute) {
if (property == null)
return false;
if (GetCustomAttributes ().Any (a => a.GetType ().Name == attribute))
return true;
var interfaces = property.DeclaringType.GetInterfaces ();
for (int i = 0; i < interfaces.Length; i++)
if (HasAttribute (interfaces[i].GetProperty (property.Name), attribute))
return true;
return false;
}
你可以采用它来同样简单的方法。
您可以使用TypeDescriptor API
System.ComponentModel.TypeDescriptor.GetAttributes(object)
您应该使用反射来获取自定义属性值
使用MemberInfo.GetCustomAttributes
方法返回附加到您的成员的自定义属性
这里是一个教程http://msdn.microsoft.com/en-us/library/aa288454(v=VS.71).aspx
编辑:从界面中获取属性看看这里
链接地址: http://www.djcxy.com/p/53115.html上一篇: Get the attributes from the interface methods and the class methods