C# 为什么从另一个类访问静态int时总是0
我有一个静态C# 为什么从另一个类访问静态int时总是0,c#,static,int,C#,Static,Int,我有一个静态int的类。我希望int,一旦设置好,就可以在程序中的任何地方访问 public class MyClass { public static int myInt; public MyClass() { myInt = 100; new TestClass(); } static void Main(string[] args) { new MyClass(); } } …但是当我在另一节课上尝试调用它时
int
的类。我希望int
,一旦设置好,就可以在程序中的任何地方访问
public class MyClass
{
public static int myInt;
public MyClass()
{
myInt = 100;
new TestClass();
}
static void Main(string[] args)
{
new MyClass();
}
}
…但是当我在另一节课上尝试调用它时
public class TestClass
{
public TestClass()
{
int testInt = MyClass.myInt;
}
}
..testInt
始终为0,即使我在调试模式下检查并看到静态int已成功设置
我做错了什么?您从未实例化该类的实例。。。所以构造函数永远不会被解雇 您需要的是一个静态构造函数。。要初始化静态成员,请执行以下操作:
public class MyClass {
public static int myInt;
static MyClass() { // Static Constructor
myInt = 100;
}
}
静态构造函数保证在访问对象之前被激发。确切的时间是不确定的。您从未实例化该类的实例。。。所以构造函数永远不会被解雇 您需要的是一个静态构造函数。。要初始化静态成员,请执行以下操作:
public class MyClass {
public static int myInt;
static MyClass() { // Static Constructor
myInt = 100;
}
}
静态构造函数保证在访问对象之前被激发。确切的时间是不确定的。正如@Simon Whitehead所建议的,或者最好的方法是在声明时初始化它。所以你可以这样写:
public static int myInt = 100;
因为这不依赖于其他任何东西,所以您不需要等待构造函数。正如@Simon Whitehead所建议的,或者最好的方法是在声明时初始化它。所以你可以这样写:
public static int myInt = 100;
因为这不依赖于任何其他内容,所以不需要等待构造函数。我看不出OP中有任何问题,因为代码确实完成了预期的任务:
尝试添加
Console.WriteLine(testInt)代码>在TestClass
构造函数的末尾。如果代码与发布的代码相等,它应该输出100
我看不出OP中有任何问题,因为代码确实完成了预期的工作:
尝试添加Console.WriteLine(testInt)代码>在TestClass
构造函数的末尾。如果代码等于发布的代码,它应该输出100
@Grantwiney他没有说它被断点击中,他可能只是在调试器中检查变量的值,发现它是0。@Simon Whitehead,他确实实例化了MyClass
@Grantwiney的一个实例他没有说它被断点击中,他可能只是在调试器中检查了变量的值,发现它是0。@Simon Whitehead,他确实实例化了MyClass
的一个实例,实际上发布的代码是有效的,因为MyClass
实例构造函数是在static void Main(string[]args)
中调用的;而TestClass
构造函数是在myInt
被赋值为100
后调用的,testInt
在上述代码中不能0
,它肯定是100
…问题可能隐藏在OP检查它是0
的方式中。实际上,发布的代码确实有效,因为MyClass
实例构造函数是在静态void Main(string[]args)
中调用的;而TestClass
构造函数是在myInt
被赋值为100
后被调用的。因此testInt
在上述代码中不能0
,它肯定是100
。问题可能隐藏在OP检查它是0
的方式中。