我是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#中访问此静态构造函数?
答案 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