类中的公共变量

时间:2014-01-26 15:22:59

标签: c# php class global-variables public

我对公共变量在类中的工作方式感到有些困惑。 我知道可以在不调用类的情况下访问公共变量,而私有变量则不能。

如果您有多个同一个类的实例,并且每个实例都为公共变量赋予不同的值,那么我假设每个类实例都有自己唯一的变量版本,每个变量都有不同的值。

我的困惑是这个

如果在不调用类的新实例的情况下更改公共变量的值会发生什么?

如果没有先调用类,该类的所有未来新实例是否都会将该变量设置为您设置的任何值?如果不是那么会发生什么?

4 个答案:

答案 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的值等于零,因为它是在构造函数中完成的。