c# - 如何判断对象初始化程序何时完成

我有各种派生对象,我希望用户能够使用对象初始值设定项。我有一个“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/

相关文章:

matlab - 将向量转置到三维

iphone - 选择时 Xcode UITableView 行未突出显示

jquery - 如何使用 jQuery 取消按钮的提交

sql - 使用 ROWNUM 在 Oracle 中获取质数记录

erlang - 在没有列表到字符串翻译的情况下格式化 Erlang 术语

macos - 如何在终端加载 I/O 套件驱动程序扩展?

ruby-on-rails - Errno::ETIMEDOUT:连接超时 - connect(2)

opengl - 可以只在 opengl 中移动相机而不重绘场景吗?

image - 如何使用 htaccess 更改图像路径?

asp.net - Web API 可以将XML 转换成Json 吗?