使用自定义属性

时间:2009-10-08 20:50:53

标签: c# custom-attributes

看一下以下问题,Real world use of custom .NET attributes您将如何实施@Esteban提出的解决方案?

我觉得我觉得代码执行的时间和地点有点困惑。你能不能提供一个很好的代码示例。

我之前已经问过这个问题,但我没有正确地说出这个问题......

3 个答案:

答案 0 :(得分:3)

关于您引用的问题/答案,我假设会有一些代码在数据层或类本身中运行以进行验证。该代码将对正在验证的对象使用Reflection来查找具有不同属性的属性,并在该属性上运行与该属性关联的特定验证逻辑。

它可能类似于以下内容:

 public void Validate( object obj )
 {
       foreach (var property in obj.GetType().GetProperties())
       {
            var attribute = property.GetCustomAttributes(typeof(ValidationAttribute), false);
            var validator = ValidationFactory.GetValidator( attribute );
            validator.Validate( property.GetValue( obj, null ) );
       }
 }

答案 1 :(得分:1)

在提交(保存)html表单(获胜表单)后,您将获得更改客户类。对于每个属性,检查它是否具有与之关联的自定义属性(继承自ValidationAttribute或实现IValiador接口或类似的东西)。对于每个这样的属性,您可以在属性值上调用属性的validate方法(创建适当的验证类并调用validate方法)。

答案 2 :(得分:1)

你会使用反射:

public class MyClass
{
     [Description("I'm an attribute!")]
     public int MyField;

     public Attribute GetAttribute(string fieldName)
     {
          FieldInfo field = typeof(MyClass).GetField("MyField");
          Attribute[] attributes = (Attribute[])field.GetCustomAttributes(typeof(Attribute), false);

          DescriptionAttribute desc = (DescriptionAttribute)attributes[0];
          return desc;
     }
}

如果属性成员是字段,则可以使用FieldInfo,如示例中所用。如果是属性,则使用PropertyInfoFieldInfoPropertyInfo的成员几乎相同。