看下面的代码也属于这种情况
- /// <summary>
- /// 通用验证基类
- /// </summary>
- public abstract class EntityValidationAttribute : ValidationAttribute
- {
- #region Constructors
- /// <summary>
- /// 定义系统某种规则的错误消息
- /// </summary>
- /// <param name="messageId"></param>
- /// <param name="args"></param>
- public EntityValidationAttribute(MessageType messageId, params object[] args) :
- base(() => MessageManager.Current.GetMessage(messageId, args)) { }
- /// <summary>
- /// 支持自定义的错误消息
- /// </summary>
- /// <param name="errMessage"></param>
- public EntityValidationAttribute(string errMessage) : base(errMessage) { }
- #endregion
它的基类ValidationAttribute的构造方法会接受一个Func<string>的委托,意思是说,子类可以根据自己的需要为它传递一个方法,但返回值必须是string类型,而上面的写法
- () => MessageManager.Current.GetMessage(messageId, args)
它是指一个匿名方法,也是符合基类的Func的方法签名的,即“无参数”,它所回调的方法是GetMessage,它有两个参数,由子类在实例化时提供的。
ValidationAttribute这个类是System.ComponentModel.DataAnnotations下的验证功能的基类,我们在继承它的时候,为它的传递string变量或者Func<string>的委托,它都会将返回
值赋值ErrorMessage这个属性,它在外界就可以被访问到的。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjkAAADlCAIAAAA+6nFHAAAcfklEQVR4nO2dO47cuBZAuR56E28FzrgRb4C9BQe1AmdMnBkODFRqOFbBwEzqqDCRN8AXlD6keClRqo+o1jkYYKpZ/EmieHQptlv5PG9vbxPfvnsOfvgAAPWgJr47+GR98MMHAKgHXJXl4IcPAFAPz3fV9Xxyl+Dni3s7na9Jtot7m0Qq81xwFQBAJbzKVdfzSVRQpLGwgPf+4l4vqABcBQBQCYtcdXGCXMTE4LswLLq4t05DSZ