2012-07-25 122 views
0

我創建了一個具有6個私有靜態方法和一個私有構造函數的類。私有構造函數運行所有的靜態方法。我想在另一個類中調用該類的私有構造函數,但我無法做到。我想要的只是一次運行這個類而不創建任何實例。該類填充一個小型數據庫,除了調用一次之外,我不需要它。使用私有構造函數和私有靜態方法調用類?

我可以把它放到一個方法中,但我不想把不相關的代碼放到我的主類中。我希望一切都更加分離。我可以用一個公共的構造函數來創建一個類的實例,但是我不明白爲什麼當不需要實例時我必須這樣做。

有沒有一種很好的方法來完成我想要做的事情?

+3

應該看到:[在C#中通過Jon Skeet實現Singleton模式](http://www.yoda.arachsys.com/csharp/singleton.html) – Habib 2012-07-25 16:05:29

+0

你正在做什麼還不清楚。如果你想讓你的課程被訪問,你必須有一些公共訪問! – 2012-07-25 16:06:30

回答

2

爲什麼不用公共靜態方法替換你的私有構造函數?

您的原始代碼:

public class DatabaseInitializer 
{ 
    private DatabaseInitializer() 
    { 
     init1(); 
     init2(); 
     ... 
    } 

    private static void init1() { ... } 
    private static void init2() { ... } 
    ... 
} 

你的新代碼

public class DatabaseInitializer 
{ 
    public static void Init() 
    { 
     init1(); 
     init2(); 
     ... 
    } 

    private static void init1() { ... } 
    private static void init2() { ... } 
    ... 
} 

比你怎麼稱呼它:

Main() 
{ 
    DatabaseInitializer.Init(); 
} 
+0

只是挑剔,你沒有在這裏取代私人構造函數。 /跑掉並隱藏 – danish 2012-07-25 16:17:34

+0

@danish:現在更清楚了嗎? – 2012-07-25 16:30:28

+0

現在他可以實例化這個類。哈哈。 對不起,我不知道它是什麼,但我正在做這樣的事情這一整天。這裏不需要提到構造函數。它是私人的;隨它去。 – danish 2012-07-25 16:45:15

0
  1. 恕我直言,這不是一個不相關的主類代碼。它依賴於這些方法。
  2. 你可以在課堂上只有一個公共方法。然後,依賴類可以調用該方法,然後調用所有正在處理的私有方法。
2

辛格爾頓將使確切一個實例。如果你不想要一個實例,只需公開一個靜態方法。如果你想確保這個被稱爲一次使靜態櫃檯或在您的類一個布爾值,從被稱爲第二次沒有一個實例 調用構造函數是不可能停止的方法,即使是公共

1

我想調用類的私有構造在另一大類

-

所有我想要的是不會產生任何東西

一個實例運行一次該類210

如果你不想創建你的類的實例,那麼不要使用構造函數。我想你只是想用一個類來「分離」一些代碼?爲此使用靜態方法。

或者如果這段代碼應該運行一次並調用一些靜態方法。您可以使用靜態構造函數

class B 
{ 
    static B() { 
    //this stuff called when you create this class or when a static member is referenced 

} 
0

如果你想調用它或它的成員從另一個類,您將需要一個公共的方法。

如果你不想要這個類的任何實例,那麼你應該創建一個可以調用的公共靜態方法。

公共靜態方法應該有一個靜態布爾值。當被調用時,它會檢查該值,如果沒有設置,則會切換靜態布爾值(因此它知道它已被調用過),然後調用所有需要運行一次且僅運行一次的私有靜態方法。

如果你只需要這個初始化做一次曾經到數據庫中,而不是每一次努力,那麼你應該把你靜態代碼用完,檢查數據庫,看它是否已經被初始化。你可以通過一個包含布爾值的單行表來讓這個特別容易,你可以測試。只需更新初始化代碼以在數據庫初始化時設置該值,然後對該值啓動代碼測試以確定其值,並根據該值採取何種操作。

相關問題