2

您好,我想知道如何在构造函数中设置几件事,但要等到对象创建后。我正在按照我的 C++ 和 QT 天的思路思考,我将创建一个 0 秒的单次计时器,一旦构建对象就会触发我的设置方法。我可以在 C# 中做到这一点吗?

我不介意做我在构造函数中所做的所有工作,只是看看是否有更好的方法。

4

3 回答 3

4

在 C# 中,整个对象是在执行构造函数之前创建的 - 所有字段都使用它们的默认值或初始值(如果有)进行初始化。如果您想延迟某些事情,请考虑使用延迟初始化

于 2012-10-15T20:56:49.373 回答
2

我不确定将你的东西放在构造函数中的问题是什么 - 你无能为力。也许您为什么要这样做/您遇到什么问题的一个例子可以让我们给您一个更合适的答案。

虽然如果你真的需要延迟代码,

public constructor()
{
    Task.Factory.StartNew(()=>
    {
        Thread.Sleep(...delay...);
        //delayed code
    });
}
于 2012-10-15T20:55:52.730 回答
1

One way to do what you are asking is to have a static method that constructs the desired object:

class MyObject {
    private MyObject() {

    }

    private void Setup() {
        // do some configuration here
    }

    public static MyObject CreateObject() {
        MyObject obj = new MyObject();
        obj.Setup();
        return obj;   
    }
}

Thus, you never use the class' actual constructor but instead invoke the static method that creates the object and sets it up at the same time. I am not sure why you would want to do this though, since the effect from the point of view of the caller is the same -- you wait until the object is created and its setup is complete to be able to use it.

于 2012-10-15T21:01:04.047 回答