【发布时间】:2012-02-09 04:33:49
【问题描述】:
我有各种派生对象,我希望用户能够使用对象初始值设定项。我有一个“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/
不幸的是,它看起来确实是不可能的。
【问题讨论】:
-
你能发布一些代码来更好地说明你想要做什么吗?
-
@BrandonMoore 这真是个坏主意。你真的让我不寒而栗。
-
@BrandonMoore - 这将为您赢得一票否决票(和一个评论标志)。
-
@BrandonMoore 主要是因为我不知道您是如何进入这种情况的,也不知道您的实际项目受到的影响有多大。因此,对于可能需要对我一无所知的项目进行大量重组的建议,我犹豫不决。
-
@BrandonMoore 很抱歉,您不喜欢得到 Bradon 的答案。问题是你真的把自己逼到了一个角落。主要问题是您使用属性设置器做的事情不应该依赖于设置属性的顺序。不过,您的 ctor 代码很好,您可以设置后备存储,并以您选择的任何方式调用副作用。我只是担心由于误解,您可能会遇到更好的问题。猛烈抨击无济于事,这里的人们通常非常乐于助人和友好,并且不妨碍他们
标签: c# oop object-initializers