Get the attributes from the interface methods and the class methods
Whats the best approach for getting the attribute values from a classes methods and from the interface methods when the methods are overloaded?
For example I would want to know that in the following example the Get method with one parameter has the two attributes and the values are 5 and "any" while the other method has attributes with values 7 and "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;
}
}
The only way I found was to check what interfaces the class implements and check attributes of the property (if exist) on those interfaces, eg (note - overall approach is tested but the code itself is ad-hoc and may not compile :)
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;
}
You can probably adopt it to methods equally easy.
您可以使用TypeDescriptor API
System.ComponentModel.TypeDescriptor.GetAttributes(object)
You should use reflection to get the custom attributes values
use MemberInfo.GetCustomAttributes
Method to return the custom attributes attached to your member
here is a tutorial http://msdn.microsoft.com/en-us/library/aa288454(v=VS.71).aspx
EDIT: for get attributes from interface look at here
链接地址: http://www.djcxy.com/p/53116.html上一篇: 没有选定日期的日期选择器?
下一篇: 从接口方法和类方法获取属性