我有各种派生对象,我希望用户能够使用对象初始值设定项。我有一个“Initializing”属性,我希望在设置这些字段时为 true,然后我希望 Initializing 属性设置为 false。
我如何判断对象初始化程序何时完成才能执行此操作?
class Foo
{
Public Foo(string p1, string p2)
{
Initializing = true;
Property1 = p1;
Property2 = p2;
Initializing = false;
}
bool Initializing;
string _property1;
string Property1
{
get { return _property1; }
set { _property1 = value; DoSomething(); }
}
string Property2 { get; set; }
public void DoSomething()
{
if(Initializing) return; // Don't want to continue if initializing
// Do something here
}
}
在上面的示例中,如果您使用构造函数,它工作正常。但是,如何使其与对象初始值设定项以相同的方式工作是个问题。
编辑:对于所有反对者,这里有人正在寻找我所追求的东西 - http://blogs.clariusconsulting.net/kzu/how-to-make-object-initializers-more-useful/
不幸的是,它看起来确实是不可能的。
最佳答案
如果您确实需要跟踪对象的初始化,那么您需要手动实现该逻辑。一种方法是复制 WinForms 代码生成器使用的代码。对象公开 ISupportInitialize 的位置当他们想要批量更新属性时的界面。所以用法就像...
var x = new Foo();
x.BeginInit();
x.Property1 = 1;
x.Property2 = 2;
x.EndInit();
https://stackoverflow.com/questions/9205468/