我在类中使用 initiazling 属性 我想在完全初始化后运行验证方法。 由于显而易见的原因,我不能使用构造函数。有没有办法在某种类初始化事件中做到这一点?
var t = new Foo
{
foo = "";
}
class Foo
{
public string foo {get; set;}
...
public bool validate {get ; set;}
private void validation()
{
if(foo == "")
validate = false;
if ...
}
}
最佳答案
(注意:为了清楚起见,我将属性重命名为 Bar,以便与类型 Foo 轻松区分)
如果 Bar
属性必须在构造时有效,为什么在构造函数中不需要它?为什么允许构造无效对象?
class Foo
{
public Foo(string bar) {
if(!IsValidBar(bar))
throw new ArgumentException("bar is not valid.", "bar");
this.Bar = bar;
}
public string Bar {get; set;}
private bool IsValidBar(string bar)
{
// blah blah
}
}
或者,如果您可以构造一个没有 Bar
属性值的 Foo
实例,但您不想允许设置 Bar
为无效值,您可以在 setter 中对此进行验证:
class Foo
{
private string bar;
public string Bar
{
get { return bar; }
set
{
if(!IsValidBar(value))
throw new ArgumentException("bar is not valid.", "value");
bar = value;
}
}
private bool IsValidBar(string bar)
{
// blah blah
}
}
关于c# - 完全初始化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4959034/