C#在setter方法上添加validation
我有一些我在C#中定义的变量:
public String firstName { get; set; } public String lastName { get; set; } public String organization { get; set; }
我想要的是在您尝试设置值时为这些方法添加validation。 让我们说你要为firstName设置一个值,我应该通过thrue regexp来设置,否则应该抛出exception。 是否可以使用这种“短语法”构建,或者我应该选择标准(如JAVA)getter和setter并在那里validation数据?
如果要validation何时设置属性,则需要使用非自动属性(即手动定义的get
和set
方法)。
但另一种validation方法是将validation逻辑与域对象分开。
class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string Organization { get; set; } } interface IValidator { bool Validate(T t); } class CustomerValidator : IValidator { public bool Validate(Customer t) { // validation logic } }
然后,你可以说:
Customer customer = // populate customer var validator = new CustomerValidator(); if(!validator.Validate(customer)) { // head splode }
这是我更喜欢的方法:
-
Customer
不应负责validation自己的数据,这是另一项责任 ,因此应该在其他地方生活。 - 不同的情况为同一域对象调用不同的validation逻辑。
您现在所拥有的称为“自动属性”,只执行简单的“获取/设置”。 为了自定义get
或set
的行为,您需要将属性转换为字段支持的属性:
private string _firstName; public string FirstName { get {return _firstName;} set { Validate(value); _firstName = value; } }
请注意,我将String
更改为string
并将属性名称大写,遵循接受的C#命名最佳实践。
我根本不会在setter
中添加validation。 相反,我会创建一个名为validate
的函数……这样,所有validation代码都在一个位置,而不是分散在整个setters
。
您必须使用完整属性语法。
上述就是C#学习教程:C#在setter方法上添加validation分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1020905.html