Nad*_*ern 42 c# static constructor
我试图使用如下的静态构造函数:
public static DataManager()
{
LastInfoID = 1;
}
Run Code Online (Sandbox Code Playgroud)
并收到此错误:
静态构造函数不允许访问修饰符
我想知道我的问题是什么.
Mar*_*ell 98
静态构造函数没有访问修饰符:它只是:
static DataManager() // note no "public"
{
LastInfoID = 1;
}
Run Code Online (Sandbox Code Playgroud)
这是因为它永远不会被显式调用(除非可能通过反射) - 但是由运行时调用; 访问级别将毫无意义.
问题是在您的类中LastInfoID字段或属性未声明为静态,您只能从静态构造函数访问静态成员.同时public从声明中删除关键字:
static DataManager()
{
LastInfoID = 1;
}
Run Code Online (Sandbox Code Playgroud)
删除public.静态构造函数的语法是:
class MyClass
{
static MyClass()
{
// Static constructor
}
}
Run Code Online (Sandbox Code Playgroud)
为了给这里的任何人一个更明确的答案,没有例子,想想为什么你必须从外部访问静态构造函数?静态类是在应用程序执行时在内存中创建的,这就是它们是静态的。换句话说,你永远不需要明确地调用一个,如果你这样做了,通过反射说(我不知道它是否会让你),那么你做错了。
当您创建一个类的新实例时,构造函数作为初始化所有内部变量的一种方式存在,并进行任何必要的处理以使类按预期方式运行。请注意,如果您不指定构造函数,编译器将为您创建一个。出于这个原因,您仍然需要像这样创建一个带有“()”的类
new MyClass();
Run Code Online (Sandbox Code Playgroud)
因为您正在调用默认构造函数(前提是您没有定义无参数的构造函数)。换句话说,非静态构造函数必须定义为 public 的原因是因为您需要显式调用它。如果我没记错的话,C# 将不会在尝试调用(通过 malloc)未定义为 public 的构造函数的代码上进行编译。
静态类中的构造函数用于“设置”目的。例如,我可以有一个静态类,它应该是我的代码和我不断保存和读取数据的文件之间的桥梁。我可以定义一个构造函数,在创建对象时,它将确保文件存在,如果不存在则创建一个默认文件(在移植到其他服务器的 Web 系统中非常有帮助)。
| 归档时间: |
|
| 查看次数: |
15935 次 |
| 最近记录: |