2012-10-15 35 views
2

你好我想知道如何在一个构造函数中设置几个东西,但是一直等到创建该对象之后。我正在思考我的C++和QT时代,当我创建一个单秒计时器为0秒,一旦对象被构建就会触发我的设置方法。我可以用C#来做到吗?在C#构造函数中的延迟设置

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

回答

2

我不确定问题是什么,只是把你的东西放在构造函数中 - 没有什么你不能做的。也许一个你为什么想要做这个/你遇到什么问题的例子会让我们给你一个更合适的答案。

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

public constructor() 
{ 
    Task.Factory.StartNew(()=> 
    { 
     Thread.Sleep(...delay...); 
     //delayed code 
    }); 
} 
+0

我可以做到这一点,但在QT中,我做到了让外观加载对象更快,而且它的构建速度更快,然后我将设置内部状态。基本上它会加速初始加载,并且我可以在创建对象之后放入数据,而不必在构建后明确调用加载方法。 – twreid

+0

@twreid:然后只是在没有Thread.Sleep() – caesay

+0

的新任务(如我的示例)中启动您的负载,但性能可能可以忽略不计,并且不会产生很大的差异。 – caesay

4

在C#中整个对象执行构造函数之前创建的 - 所有的领域都与它们的默认或初始值(如果有的话)初始化。如果您想延迟某些事情,请考虑使用lazy initialization。做你问

+0

噢好吧,所以不需要我的单发定时器。谢谢。 – twreid

0

的一种方式是有构建所需的对象的静态方法:

class MyObject { 
    private MyObject() { 

    } 

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

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

因此,你从来不使用这个类的实际构造函数,而是调用创建的静态方法对象并在同一时间进行设置。我不确定为什么你想这样做,因为从调用者的角度来看,效果是一样的 - 你等到对象被创建并且它的设置完成后才能使用它。

+0

不确定这将用于什么目的或优点。它不是真的他在问什么。 – caesay