假设我有一个具有两个字符串类型属性的类
- 道具1
- 道具2
并且有以下限制
- 如果 Prop2 值为“Test2”,则 Prop1 不能等于“Test1”
- 如果 Prop1 值为“Test11”,则 Prop2 不能等于“Test22”
- 如果 Prop2="Test222" 则设置 Prop1="Test111"
定义其值相互依赖的属性的最佳方法是什么,并且在一个属性中所做的更改应该触发另一个属性的 setter ?
假设我有一个具有两个字符串类型属性的类
并且有以下限制
定义其值相互依赖的属性的最佳方法是什么,并且在一个属性中所做的更改应该触发另一个属性的 setter ?
您需要在属性设置器中添加验证。
string prop1;
string prop2;
string Prop1
{
get { return prop1;}
set
{
if (!( Prop2 == "Test2" && value == "Test1"))
{
Prop1 = value;
}
... Add other condition here
}
}
string Prop2
{
get { return prop1;}
set
{
// set Prop2 based on Prop1
}
}
您在这里有很多选择:
using
声明中使用守卫。您负责在属性设置器中编写您可能需要的“逻辑”(一种验证)
我会使用规范模式来提取验证逻辑并使其也可测试
http://devlicio.us/blogs/jeff_perrin/archive/2006/12/13/the-specification-pattern.aspx
您可以在每个属性的设置器中实现此逻辑,但我会质疑这样做的智慧。
最好是Validate
在对象上有一个方法来检查这些属性的状态,或者让另一个对象负责执行验证并返回错误或根据需要对对象进行更改。