如何在c#中的静态类中调用静态构造函数

时间:2017-07-01 12:21:25

标签: c# c#-4.0

我是c#的新手。请指导我找出这个问题的解决方案。 我有一个静态类A.在这里我有一个静态构造函数。 代码如下:

using System; 
using System.Collections.Generic;
using System.Linq; 
using System.Text;
namespace ConsoleApplication6 
{
    class Program 
    { 
        static void Main(string[] args) 
        { 
        } 
    } 
    static class A 
    { 
        static A() 
        { 
            //Console.WriteLine("static constructor is called."); 
        } 
    } 
}

如何在c#中访问此静态构造函数?

2 个答案:

答案 0 :(得分:3)

你做不到。正如MSDN中关于Static Classes

的文章一样
  

静态类与非静态类基本相同,但在那里   是一个区别:静态类无法实例化。其他   单词,你不能使用new关键字来创建变量   班级类型。因为没有实例变量,所以您可以访问   使用类名本身的静态类的成员。

我也建议你阅读这篇文章

Static Constructors (C# Programming Guide)

正如写的那样,你无法调用静态构造函数

  

静态构造函数用于初始化任何静态数据,或者   执行仅需要执行一次的特定操作。它   在创建第一个实例之前,会自动调用   静态成员被引用。

     

静态构造函数具有以下属性:

     
      
  • 静态构造函数不接受访问修饰符或具有参数。

  •   
  • 在创建第一个实例或任何静态成员之前,会自动调用静态构造函数来初始化类   引用。

  •   
  • 无法直接调用静态构造函数。

  •   
  • 用户无法控制何时在程序中执行静态构造函数

  •   

下面是静态构造函数如何工作的示例。

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication6 
{
    public class Program 
    { 
        public static void Main(string[] args) 
        { 
            A myClass1WithStaticConstructor = new A();
            A myClass2WithStaticConstructor = new A();
        } 
    } 
    public class A 
    { 
        public A()
        {
            Console.WriteLine("default constructor is called."); 
        }
        static A() 
        { 
            Console.WriteLine("static constructor is called."); 
        } 
    } 
}

输出如下:

  

调用静态构造函数   调用默认构造函数   调用默认构造函数。

因此,从输出中我们看到静态构造函数仅在第一次被调用。

如果您想将它与静态类一起使用,也可以使用以下示例:

using System; 
using System.Collections.Generic;
using System.Linq; 
using System.Text;
namespace ConsoleApplication6 
{
    public class Program 
    { 
        public static void Main(string[] args) 
        { 
            Console.WriteLine(A.abc);
        } 
    } 
    public static class A 
    { 
        public static int abc;

        static A() 
        { 
            abc=10;
            Console.WriteLine("static constructor is called."); 
        } 
    } 
}

输出如下:

  

调用静态构造函数   10

所以我们看到在这种情况下也会自动调用静态构造函数。

答案 1 :(得分:-1)

无法直接调用静态构造函数。 See docs.microsoft.com about static constructors