C#中是否存在使用静态构造函数的默认构造函数?

时间:2016-04-05 18:29:57

标签: c# oop static-constructor

我对实例类中的静态构造函数感到困惑。

由于静态构造函数默认是私有的,我们不能对它们使用访问修饰符,那么在实例类中是否存在静态构造函数的默认构造函数?

如果是,那么为什么?因为我们已经定义了一个构造函数(private static和parameter less),并且根据C#概念,如果我们提供构造函数,那么默认构造函数就不存在了。 (我可能在这里错了)

如果否,则为什么我们能够使用静态构造函数创建实例类的对象。

以下示例已成功完成并执行:

public class OOPS
{
    static int i = 0;
     static OOPS(){             
        Console.WriteLine("Static Constructor ");
    }

    //OOPS() {
    //    Console.WriteLine("Instance Constructor");
    //}

    public static void ShowStaticMethod() {
        Console.WriteLine("Static Method  ");
    }

    public void ShowInstanceMethod()
    {
        Console.WriteLine("instance Method");
    }
}

class Client
{
    public void ClientMethod() {
        OOPS o = new OOPS();
        o.ShowInstanceMethod();
        OOPS.ShowStaticMethod();
        Console.WriteLine("Client completed");                       
        Console.ReadLine();
    }        
}

2 个答案:

答案 0 :(得分:0)

  

如果我们提供构造函数,那么默认构造函数不会存在。   (我可能在这里错了)

你错了一件事,上面的陈述对于实例构造函数是正确的,而不是静态构造函数。

查看C# language specification.

  

10.11.4默认构造函数

     
    

如果一个类包含 no instance constructor 声明,则a     默认实例构造函数是自动提供的。

  

因此,当您提供静态构造函数时,它与默认实例构造函数没有任何关系,那就是您稍后在代码中使用的那个。

答案 1 :(得分:0)

静态构造函数不会影响实例构造函数。如果您不希望实例化该类,请将该类标记为static

public static class OOPS
{
   static OOPS()
   {
   }
}