0

我创建了一个包含 6 个私有静态方法和一个私有构造函数的类。私有构造函数运行所有静态方法。我想在另一个类中调用该类的私有构造函数,但我做不到。我只想在不创建任何实例的情况下运行这个类一次。该类填充了一个小型数据库,除了调用它一次外,我不需要它。

我可以将它放入一个方法中,但我不想将不相关的代码放入我的主类中。我希望一切都更加分离。我可以用一个公共构造函数来做它并创建一个类的实例,但我不明白为什么在不需要实例时我必须这样做。

有没有一种好方法可以完成我想做的事情?

4

5 回答 5

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();
}
于 2012-07-25T16:12:24.040 回答
2

单例将准确地创建一个实例。如果您不想要实例,只需公开一个静态方法。如果您想确保仅调用一次,请在您的类中创建一个静态计数器或布尔值,以阻止该方法被第二次调用而没有实例调用构造函数是不可能的,即使它是公共的

于 2012-07-25T16:14:33.603 回答
1

我想在另一个类中调用该类的私有构造函数

--

我想要的只是运行这个类一次而不创建任何实例

如果您不想创建类的实例,则不要使用构造函数。我想你只是想使用一个类来“分离”一些代码?为此使用静态方法。

或者如果这段代码应该运行一次并调用一些静态方法。您可以使用静态ctor

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

 }
于 2012-07-25T16:23:02.087 回答
0
  1. 恕我直言,这不是主类的无关代码。这取决于这些方法。
  2. 你可以在类中只有一个公共方法。然后依赖类可以调用该方法,该方法又调用所有私有方法进行处理。
于 2012-07-25T16:09:11.997 回答
0

如果要从另一个类调用它或其成员,则需要创建一个公共方法。

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

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

如果您只需要对数据库进行一次初始化,而不是每次都进行一次,那么您应该运行静态代码并检查数据库以查看它是否已经初始化。您可以通过一个包含可以测试的布尔值的单行表来使这变得特别容易。只需更新初始化代码以在数据库初始化时设置该值,并让您的启动代码测试该值以确定其值以及基于该值采取的操作。

于 2012-07-25T16:38:21.470 回答