我有以下课程:
public abstract class BusinessRule
{
public string PropertyName { get; set; }
public string ErrorMessage { get; set; }
public BusinessRule(string propertyName)
{
PropertyName = propertyName;
ErrorMessage = propertyName + " is not valid";
}
public BusinessRule(string propertyName, string errorMessage)
: this(propertyName)
{
ErrorMessage = errorMessage;
}
}
和
public class ValidateId : BusinessRule
{
public ValidateId(string propertyName) : base(propertyName)
{
ErrorMessage = propertyName + " is an invalid identifier";
}
public ValidateId(string propertyName, string errorMessage)
: base(propertyName)
{
ErrorMessage = errorMessage;
}
public override bool Validate(BusinessObject businessObject)
{
try
{
int id = int.Parse(GetPropertyValue(businessObject).ToString());
return id >= 0;
}
catch
{
return false;
}
}
}
和
public class Customer : BusinessObject
{
public Customer()
{
AddRule(new ValidateId("CustomerId"));
}
}
从 Customer 类中,我添加了一个新的业务规则 - ValidateId 通过调用它的构造函数,这很好,但是 ValidateId 的构造函数正在调用基类构造函数,这是我开始有点困惑的地方。
当 ValidateId 构造函数可以做我想要实现的事情时,为什么我需要调用基类构造函数?ValidateId 构造函数和基本构造函数都将错误消息设置为:
这是在基本构造函数中:
PropertyName = propertyName;
ErrorMessage = propertyName + " is not valid";
这是在 ValidateId 构造函数中:
ErrorMessage = propertyName + " is an invalid identifier";
哪一个 ErrorMessage 将用于向用户显示错误?
此外,如果我删除: base(propertyName)
而不调用基本构造函数,我会得到 BusinessRule 不包含无参数构造函数错误消息,显然我可以向 Businessrule 添加一个无参数构造函数并在 ValidateId 构造函数中实现所有内容,但我想知道有什么优点/含义调用或不调用基本构造函数?
谢谢