WEB开发网
开发学院软件开发Java Why Java Sucks and C# Rocks(3):Attribute与A... 阅读

Why Java Sucks and C# Rocks(3):Attribute与Annotation

 2010-05-04 00:00:00 来源:WEB开发网   
核心提示: 于是,我们便可以在一个类的属性上进行标记,Why Java Sucks and C# Rocks(3):Attribute与Annotation(3),表示对某个属性的验证要求:publicclassPerson{[Range(Min=10,Max=60)]publicintAge{get;se

于是,我们便可以在一个类的属性上进行标记,表示对某个属性的验证要求:

public class Person 
{ 
  [Range(Min = 10, Max = 60)] 
  public int Age { get; set; } 
 
  [Range(Min = 30, Max = 50)] 
  public int Size { get; set; } 
 
  [Regex(Pattern = @"^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$")] 
  public string Email { get; set; } 
}

这样的标记便表示Age的合法范围是10到60,Size的合法范围是30到50,而Email需要满足特定的正则表达式。标记之后,我们便可以使用统一的代码进行验证,例如:

public static void Validate(object o) 
{ 
  var type = o.GetType(); 
  foreach (var property in type.GetProperties()) 
  { 
    var validateAttrs = 
      (ValidationAttribute[])property.GetCustomAttributes( 
        typeof(ValidationAttribute), true); 
 
    var propValue = property.GetValue(o, null); 
    foreach (var attr in validateAttrs) 
    { 
      var result = attr.Validate(propValue); 
      // do more things 
    } 
  } 
}

如此,我们便可以轻易地获取每个属性上的验证条件,并调用Validate方法进行验证。我们有能力这么做的原因,是因为C#中的 Attribute是类,这样我们可以使用抽象类ValidationAttribute进行统一控制。如果这段验证逻辑是由类库提供的,而开发人员想要增加额外的验证条件,也只需要自己定义新的类来继承ValidationAttribute,并提供自定义的Validate方法逻辑即可。这种方式大量出现在各类.NET的类库及框架中,给.NET程序员带来许多便利。

上一页  1 2 3 4 5 6 7  下一页

Tags:Why Java Sucks

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接