gpt4 book ai didi

c# - 完全初始化的类

转载 作者:行者123 更新时间:2023-11-30 12:35:41 26 4
gpt4 key购买 nike

我在类中使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com