2012-10-15 31 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