我对公共变量在类中的工作方式感到有些困惑。 我知道可以在不调用类的情况下访问公共变量,而私有变量则不能。
如果您有多个同一个类的实例,并且每个实例都为公共变量赋予不同的值,那么我假设每个类实例都有自己唯一的变量版本,每个变量都有不同的值。
我的困惑是这个
如果在不调用类的新实例的情况下更改公共变量的值会发生什么?
如果没有先调用类,该类的所有未来新实例是否都会将该变量设置为您设置的任何值?如果不是那么会发生什么?
答案 0 :(得分:2)
我认为你以某种方式混淆了公共变量和静态变量。以下声明:
可以在不调用类
的情况下访问公共变量
非静态变量完全是明显错误的,可能是私有的还是公开的。
如果更改类实例的公共变量,它将仅更改实例,对其他现有实例或将来的实例无效。
另一方面,静态变量确实可以在没有类实例的情况下调用,并且更改它们具有“全局”效果,与类实例无关。
(如果您有任何特定的代码,需要进一步的指导,请发布)
答案 1 :(得分:0)
在像C#这样的语言中,你无法做到这一点
访问类本身的任何(非静态)变量而不是它的实例
会导致编译错误。
答案 2 :(得分:0)
也许一些示例代码会有所帮助;私有变量无法访问,所以我猜你的术语变得混乱了。在下面的示例中,PublicStaticInt属性声明为static;简而言之,这意味着您的AppDomain中只有一个副本。创建的每个ExampleClass实例都引用它的相同副本。 PublicInt属性是一个实例属性;这意味着ExampleClass的每个实例都有自己的数据副本。
public class ExampleClass
{
public static int PublicStaticInt { get; set; }
public int PublicInt { get; set; }
}
private static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
var example = new ExampleClass();
Console.WriteLine("PublicStaticInt = " + ExampleClass.PublicStaticInt.ToString() + ", PublicInt = " + example.PublicInt);
ExampleClass.PublicStaticInt++;
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
答案 3 :(得分:0)
当您创建同一个类的新实例时,每个实例都为每个数据成员都有自己的值。例如
class A
{
public int a;
public int b;
public A()
{
a=0;
b=0;
}
}
当我像这样创建A类实例时
A a11 =new A();
A b11 = new A();
现在,如果我改变a11的值,它将永远不会改变b11的值,如果我改变b11的值,它将永远不会改变a11的值。
如果没有先调用类,该类的所有未来新实例是否都会将该变量设置为您设置的任何值?如果不是那么会发生什么?
否则它们将设置为您在类的构造函数中设置的值。在这种情况下,它将为每个类的实例设置a和b的值等于零,因为它是在构造函数中完成的。