由于公司的需要,从去年开始,我就从Java转向Net平台进行开发了,说实话,刚开始接触Net的时候还是很不习惯,最不习惯的是对多态的处理,经常忘记将某些方法声明为Virtual,尤其在习惯了Java的抽象概念之后,在实际应用中,犯了不少错误,不过在浏览了许多大侠的博客后,对C#语言的特性有了进一步的了解,特别钟情于它的Attribute特性,这种在运行期间感知代码级别的能力与Java中的元数据很相似,并且更容易使用,因此在一次公司的基于 Net 接口程序改造中,我尝试使用这种机制简化验证信息的开发。

      由于我们公司是一个数据库公司,卖的是实时数据库,与SQL,ACCESS等概念不同,讲究的是数据的压缩率以及存储速度,因此在与各种设备进行数据转换时,没有标准的如SQL等通讯协议可用,所以公司每个项目,基本上都需要增对数据源(SQL,Access,PLC)等设备开发接口程序,这样一来,随着项目的增对,程序的代码和维护变得很困难,在一次客户增对接口程序的投诉后,公司决定对通讯接口进行统一的开发,这次改造要求将代码的编写量减少,并且要求所有程序拥有一致的界面,一致的缓存机制,开发人员只需要开发特定于设备的数据采集代码,这样就避免了代码质量的参差不齐,同时减少了不必要的重复代码的开发。

      这个工作很荣幸(其实很不幸)的落到了我的头上,在我仔细查看了客户针对程序的投诉后,发现问题居然是由于没有正确对配置参数进行验证造成的,客户在一个需要输入IP的位置输入了错误格式的IP地址,居然造成了程序的崩溃,这也从侧面显示出了现在的许多大学刚毕业出来的程序员对程序的分析不严谨,许多开发人员往往认为客户都和他们一样聪明,都会将信息输入准确无误,然后程序运行稳定,他们就可以高枕无忧准备去夏威夷度假了,殊不知这种观念正式造成他们节日狂欢被迫取消的原因(奖金被扣),在分析过后,我决定首先对验证信息这一块下手

      在对配置文件分析后,我将这个模块定义如下
        1. 需要将配置信息分为两部分,必须的(Required)和可选的(Option)
        2. 由于配置信息的多样,因此不可能实现所有的验证,因此要让开发人员有能力自定义参数的验证,例如验证一个PLC设备名称是否符合要求
  
      使用Net的Attribute机制,编写UML图如下,验证信息栏提供了基本的参数验证
      基于.Net Attribute 应用的自动验证

       我将参数分为了RequiredParam和OptionParam两部分,同时让他们都继承于同一个类ParamAttribute,ParamAttribute代码如下
       
        
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证     /**//// <summary>
基于.Net Attribute 应用的自动验证    
/// 标识一个组件需要配置的属性
基于.Net Attribute 应用的自动验证    
/// </summary>

基于.Net Attribute 应用的自动验证    [UtilityLibrary.Developer.SoftwareAttribute.AuthorAttribute("Vincent""Developer""2008-5-28")]
基于.Net Attribute 应用的自动验证    [System.AttributeUsage(AttributeTargets.All, AllowMultiple 
= true)]
基于.Net Attribute 应用的自动验证    
public class ParamAttribute : System.Attribute
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证        
private String m_paramName;
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 标识参数的名称
基于.Net Attribute 应用的自动验证        
/// </summary>

基于.Net Attribute 应用的自动验证        public String ParamName
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
get 基于.Net Attribute 应用的自动验证return m_paramName; }
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
private ParamTypeEnum m_paramType;
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 表示此参数的类型,提供编译器调用对应的检验函数
基于.Net Attribute 应用的自动验证        
/// </summary>

基于.Net Attribute 应用的自动验证        public ParamTypeEnum ParamType
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
get 基于.Net Attribute 应用的自动验证return m_paramType; }
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 构造函数
基于.Net Attribute 应用的自动验证        
/// </summary>
基于.Net Attribute 应用的自动验证        
/// <param name="paramName">参数的名称</param>
基于.Net Attribute 应用的自动验证        
/// <param name="paramType">参数的类型</param>

基于.Net Attribute 应用的自动验证        public ParamAttribute(String paramName, ParamTypeEnum paramType)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            m_paramName 
= paramName;
基于.Net Attribute 应用的自动验证            m_paramType 
= paramType;
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证    }

ParamTypeEnum 枚举代码如下

基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    /**//// <summary>
基于.Net Attribute 应用的自动验证    
/// 标识参数的类型枚举
基于.Net Attribute 应用的自动验证    
/// </summary>

基于.Net Attribute 应用的自动验证    [Flags()]
基于.Net Attribute 应用的自动验证    
public enum ParamTypeEnum
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证        Integer,
基于.Net Attribute 应用的自动验证        Double,
基于.Net Attribute 应用的自动验证        String,
基于.Net Attribute 应用的自动验证        IP,
基于.Net Attribute 应用的自动验证        Port,
基于.Net Attribute 应用的自动验证        UInt,
基于.Net Attribute 应用的自动验证        File,
基于.Net Attribute 应用的自动验证        Boolean,
基于.Net Attribute 应用的自动验证        DnaService,
基于.Net Attribute 应用的自动验证        UserDefined 
= -1
基于.Net Attribute 应用的自动验证    }

RequiredParamAttribute以及OptionParamAttribute 中的所有特性均继承至ParamAttribute中,他们仅提供标识属性的类型的作用

RequiredParamAttribute代码如下

基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    /**//// <summary>
基于.Net Attribute 应用的自动验证    
/// 标识一个类要正常运行所必需要的属性,提供编译器执行相应的验证函数或用户自定义的验证函数
基于.Net Attribute 应用的自动验证    
/// </summary>

基于.Net Attribute 应用的自动验证    [UtilityLibrary.Developer.SoftwareAttribute.AuthorAttribute("Vincent""Developer""2008-5-28")]
基于.Net Attribute 应用的自动验证    [System.AttributeUsage(AttributeTargets.All, AllowMultiple 
= true)]
基于.Net Attribute 应用的自动验证    
public class RequiredParamAttribute : ParamAttribute
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 构造函数
基于.Net Attribute 应用的自动验证        
/// </summary>
基于.Net Attribute 应用的自动验证        
/// <param name="paramName">参数的名称</param>
基于.Net Attribute 应用的自动验证        
/// <param name="paramType">参数的类型</param>

基于.Net Attribute 应用的自动验证        public RequiredParamAttribute(String paramName, ParamTypeEnum paramType) 
基于.Net Attribute 应用的自动验证        : 
base(paramName,paramType)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证    }

 

OptionParamAttribute 代码如下

基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    /**//// <summary>
基于.Net Attribute 应用的自动验证    
///  标识一个组件的可选属性
基于.Net Attribute 应用的自动验证    
/// </summary>

基于.Net Attribute 应用的自动验证    [System.AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
基于.Net Attribute 应用的自动验证    
public class OptionParamAttribute : ParamAttribute
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 构造函数
基于.Net Attribute 应用的自动验证        
/// </summary>
基于.Net Attribute 应用的自动验证        
/// <param name="paramName">参数的名称</param>
基于.Net Attribute 应用的自动验证        
/// <param name="paramType">参数的类型</param>

基于.Net Attribute 应用的自动验证        public OptionParamAttribute(String paramName, ParamTypeEnum paramType)
基于.Net Attribute 应用的自动验证            : 
base(paramName, paramType)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证    }

同时,定义一个ICustomerValidator的接口,当开发人员实现这个接口时,就可以实现自定义验证机制,代码如下

基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    /**//// <summary>
基于.Net Attribute 应用的自动验证    
/// 提供自定义验证信息的功能
基于.Net Attribute 应用的自动验证    
/// </summary>

基于.Net Attribute 应用的自动验证    public interface ICustomerValidator
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证        
bool Validator(String paramName, String value);
基于.Net Attribute 应用的自动验证    }

完成后,编写一个Validator类,捕获配置了Params属性的信息

基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证 /**//// <summary>
基于.Net Attribute 应用的自动验证    
/// 获取设置了Params类的信息
基于.Net Attribute 应用的自动验证    
/// </summary>

基于.Net Attribute 应用的自动验证    public class Validator
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证        
private ICustomerValidator m_customerValidator;
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
private ParamAttribute[] m_params;
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
private RequiredParamAttribute[] m_requriedParams;
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
public RequiredParamAttribute[] RequriedParams
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
get 基于.Net Attribute 应用的自动验证return m_requriedParams; }
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
private OptionParamAttribute[] m_optionParams;
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
public OptionParamAttribute[] OptionParams
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
get 基于.Net Attribute 应用的自动验证return m_optionParams; }
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
private Dictionary<String, RequiredParamAttribute> m_requiredDictionary = new Dictionary<String,RequiredParamAttribute>();
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
private Dictionary<String, ParamAttribute> m_paramDictionary = new Dictionary<String, ParamAttribute>();
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
public Validator(Object o)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            
if (o == null)
基于.Net Attribute 应用的自动验证                
throw new ArgumentNullException();
基于.Net Attribute 应用的自动验证            
//获取o的类型
基于.Net Attribute 应用的自动验证
            Type t = o.GetType();
基于.Net Attribute 应用的自动验证            
//判断o是否实现了自定义验证信息
基于.Net Attribute 应用的自动验证
            if (TypeUtility.IsType<ICustomerValidator>(t))
基于.Net Attribute 应用的自动验证                m_customerValidator 
= o as ICustomerValidator;
基于.Net Attribute 应用的自动验证            m_params 
= AttributeUtility.GetCustomAttributes<ParamAttribute>(t, true);
基于.Net Attribute 应用的自动验证            m_requriedParams 
= AttributeUtility.GetCustomAttributes<RequiredParamAttribute>(t, true);
基于.Net Attribute 应用的自动验证            m_optionParams 
= AttributeUtility.GetCustomAttributes<OptionParamAttribute>(t, true);
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证            InitDictionary();
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 初始化所有信息的字典列表
基于.Net Attribute 应用的自动验证        
/// </summary>

基于.Net Attribute 应用的自动验证        private void InitDictionary()
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            
foreach (ParamAttribute p in m_params)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                
if (!m_paramDictionary.ContainsKey(p.ParamName))
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证                
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                    m_paramDictionary.Add(p.ParamName, p);
基于.Net Attribute 应用的自动验证                }

基于.Net Attribute 应用的自动验证            }

基于.Net Attribute 应用的自动验证            
foreach (RequiredParamAttribute p in m_requriedParams)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                
if (!m_requiredDictionary.ContainsKey(p.ParamName))
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证                
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                    m_requiredDictionary.Add(p.ParamName, p);
基于.Net Attribute 应用的自动验证                }

基于.Net Attribute 应用的自动验证            }

基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 验证某个参数设置的值是否正确
基于.Net Attribute 应用的自动验证        
/// </summary>
基于.Net Attribute 应用的自动验证        
/// <param name="paramName">参数的名称</param>
基于.Net Attribute 应用的自动验证        
/// <param name="paramValue">参数的值</param>
基于.Net Attribute 应用的自动验证        
/// <returns>正确 : true 错误 : false</returns>

基于.Net Attribute 应用的自动验证        public bool Validate(String paramName,String paramValue)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            
if (m_requiredDictionary.ContainsKey(paramName))
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                RequiredParamAttribute p 
= m_requiredDictionary[paramName];
基于.Net Attribute 应用的自动验证                
return ParamValidators.Validator(m_customerValidator, paramName, paramValue, p.ParamType);
基于.Net Attribute 应用的自动验证            }

基于.Net Attribute 应用的自动验证            
return false;
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证    }


同时,开发一个参数配置页面如下
基于.Net Attribute 应用的自动验证


窗体代码如下

基于.Net Attribute 应用的自动验证public partial class Form1 : Form
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证        
private UtilityLibrary.Developer.ParamValidate.Validator m_validator;
基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证        
public Form1(Object o)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            InitializeComponent();
基于.Net Attribute 应用的自动验证            m_validator 
= new UtilityLibrary.Developer.ParamValidate.Validator(o);
基于.Net Attribute 应用的自动验证            InitParamGridView();
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 加载所有配置参数信息
基于.Net Attribute 应用的自动验证        
/// </summary>

基于.Net Attribute 应用的自动验证        private void InitParamGridView()
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            RequiredParamAttribute[] requriedParams 
= m_validator.RequriedParams;
基于.Net Attribute 应用的自动验证            
if (requriedParams != null && requriedParams.Length != 0)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                
for (int i = 0; i < requriedParams.Length; i++)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证                
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                    DataGridViewRow newRow 
= new DataGridViewRow();
基于.Net Attribute 应用的自动验证                    newRow.CreateCells(dataGridView1);
基于.Net Attribute 应用的自动验证                    newRow.Cells[
0].Style.ForeColor = Color.Red;
基于.Net Attribute 应用的自动验证                    newRow.Cells[
0].Value = requriedParams[i].ParamName;
基于.Net Attribute 应用的自动验证                    newRow.Cells[
1].Value = ParamTypeHelper.GetTypeDesc(requriedParams[i].ParamType);
基于.Net Attribute 应用的自动验证                    
this.dataGridView1.Rows.Add(newRow);
基于.Net Attribute 应用的自动验证                }

基于.Net Attribute 应用的自动验证            }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证            OptionParamAttribute[] optionParams 
= m_validator.OptionParams;
基于.Net Attribute 应用的自动验证            
if (optionParams != null && optionParams.Length != 0)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                
for (int i = 0; i < optionParams.Length; i++)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证                
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                    DataGridViewRow newRow 
= new DataGridViewRow();
基于.Net Attribute 应用的自动验证                    newRow.CreateCells(dataGridView1);
基于.Net Attribute 应用的自动验证                    newRow.Cells[
0].Value = optionParams[i].ParamName;
基于.Net Attribute 应用的自动验证                    newRow.Cells[
1].Value = ParamTypeHelper.GetTypeDesc(optionParams[i].ParamType);
基于.Net Attribute 应用的自动验证                    
this.dataGridView1.Rows.Add(newRow);
基于.Net Attribute 应用的自动验证                }

基于.Net Attribute 应用的自动验证            }

基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            
// ColumnIndex为3代表点击的是单击事件
基于.Net Attribute 应用的自动验证
            if (e.ColumnIndex == 3)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                String paramName 
= dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
基于.Net Attribute 应用的自动验证                
object paramValue = dataGridView1.Rows[e.RowIndex].Cells[2].Value;
基于.Net Attribute 应用的自动验证                m_validator.Validate(paramName, paramValue 
== null ? "" : paramValue.ToString());
基于.Net Attribute 应用的自动验证            }

基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证    }


在测试中,添加一个类Test如下

基于.Net Attribute 应用的自动验证static class Program
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
/**//// <summary>
基于.Net Attribute 应用的自动验证        
/// 应用程序的主入口点。
基于.Net Attribute 应用的自动验证        
/// </summary>

基于.Net Attribute 应用的自动验证        [STAThread]
基于.Net Attribute 应用的自动验证        
static void Main()
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            Application.EnableVisualStyles();
基于.Net Attribute 应用的自动验证            Application.SetCompatibleTextRenderingDefault(
false);
基于.Net Attribute 应用的自动验证            Application.Run(
new Form1(new Test()));
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证    }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证    [RequiredParam(
"IP地址",ParamTypeEnum.IP)]
基于.Net Attribute 应用的自动验证    [RequiredParam(
"端口号",ParamTypeEnum.Port)]
基于.Net Attribute 应用的自动验证    [OptionParam(
"可选参数",ParamTypeEnum.String)]
基于.Net Attribute 应用的自动验证    [RequiredParam(
"自定义验证",ParamTypeEnum.UserDefined)]
基于.Net Attribute 应用的自动验证    
public class Test : ICustomerValidator
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证    
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
ICustomerValidator 成员#region ICustomerValidator 成员
基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
public bool Validator(string paramName, string value)
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证        
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证            
if (paramName.Equals("自定义验证"))
基于.Net Attribute 应用的自动验证基于.Net Attribute 应用的自动验证            
基于.Net Attribute 应用的自动验证{
基于.Net Attribute 应用的自动验证                MessageBox.Show(
"你选择了自定义验证,验证的值为 : " + value);
基于.Net Attribute 应用的自动验证                
return false;
基于.Net Attribute 应用的自动验证            }

基于.Net Attribute 应用的自动验证            
return false;
基于.Net Attribute 应用的自动验证        }

基于.Net Attribute 应用的自动验证
基于.Net Attribute 应用的自动验证        
#endregion

基于.Net Attribute 应用的自动验证    }

运行窗体后,显示界面如下

基于.Net Attribute 应用的自动验证

红色为系统运行时必须的参数,点击Ip地址的验证按钮,将执行系统自带的验证函数

基于.Net Attribute 应用的自动验证

同时点击自定义验证函数时,信息显示如下

基于.Net Attribute 应用的自动验证


由于小弟对Net平台知识很欠缺,如果有什么地方做得不好,希望各位前辈多指点,谢谢。
     

转载于:https://www.cnblogs.com/VincentWP/archive/2008/06/23/1228243.html

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
  • 2021-07-16
  • 2022-12-23
  • 2022-12-23
  • 2021-12-02
  • 2022-12-23
猜你喜欢
  • 2021-06-01
  • 2022-01-07
  • 2021-06-25
  • 2022-12-23
相关资源
相似解决方案