使用私有构造函数和私有静态方法调用类?

时间:2012-07-25 16:03:15

标签: c#

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

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

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

5 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:2)

Singleton会生成一个实例。如果您不想要实例,只需将一个静态方法公开。如果你想确保只调用一次在你的类中创建一个静态计数器或bool来阻止该方法被第二次调用 没有实例的调用构造函数是不可能的,即使它是公共的

答案 2 :(得分:1)

  

我想在另一个类

中调用该类的私有构造函数

-

  

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

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

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

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

 }

答案 3 :(得分:0)

  1. 恕我直言,这不是主类的无关代码。这取决于这些方法。
  2. 你可以在课堂上有一个公共方法。然后,依赖类可以调用该方法,该方法又调用所有处理的私有方法。

答案 4 :(得分:0)

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

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

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

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