2012-07-25 106 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

如果你想调用它或它的成员从另一个类,您将需要一个公共的方法。

如果你不想要这个类的任何实例,那么你应该创建一个可以调用的公共静态方法。

公共静态方法应该有一个静态布尔值。当被调用时,它会检查该值,如果没有设置,则会切换静态布尔值(因此它知道它已被调用过),然后调用所有需要运行一次且仅运行一次的私有静态方法。

如果你只需要这个初始化做一次曾经到数据库中,而不是每一次努力,那么你应该把你静态代码用完,检查数据库,看它是否已经被初始化。你可以通过一个包含布尔值的单行表来让这个特别容易,你可以测试。只需更新初始化代码以在数据库初始化时设置该值,然后对该值启动代码测试以确定其值,并根据该值采取何种操作。