2014-01-26 5 views
0

Я немного смущен тем, как публичные переменные работают внутри класса. Я знаю, что публичные переменные могут быть доступны без вызова класса, тогда как частные не могут.Открытая переменная внутри класса

Если у вас есть несколько экземпляров одного и того же класса, и каждый из них дает переменную общедоступную переменную, то я предполагаю, что каждый экземпляр класса будет иметь свою собственную уникальную версию переменной, имеющую другое значение.

Моя путаница это

Что произойдет, если изменить значение общей переменной, не вызывая новый экземпляр класса?

Будут ли все будущие новые экземпляры класса начинаться с этой переменной, установленной на все, что вы установили, без первого вызова класса? если нет, то что происходит?

ответ

0

В таких языках, как C#, вы не можете этого сделать.
Доступ к любой (нестатической) переменной самого класса, а не к экземпляру из него
приведет к ошибке компилятора.

2

Я думаю, вы каким-то образом смешали общедоступные переменные и статические переменные. Ниже заявление:

публичные переменные могут быть доступны без вызова класса

совершенно и явно неправильны для не статических переменных, может они быть частными или государственными.

Если вы измените общедоступную переменную экземпляра класса, он изменит только этот экземпляр, не имеющий никакого влияния на другие существующие экземпляры или будущие экземпляры.

Статические переменные, с другой стороны, действительно могут быть вызваны без экземпляра класса, а их изменение имеет «глобальный» эффект, не связанный с экземпляром класса.

(Если у вас есть какой-либо конкретный код, который вы работали с и нуждаются в дальнейшем руководстве, пожалуйста, по почте)

0

Возможно, некоторые примеры кода поможет; доступ к частным переменным невозможен, поэтому я предполагаю, что ваша терминология путается. В приведенном ниже примере свойство PublicStaticInt объявляется как статическое; просто введите, это означает, что в вашем 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(); 
    } 
0

При создании нового экземпляра того же класса каждый экземпляр имеет свои собственные значения для каждого элемента данных. например

class A 
     { 
     public int a; 
     public int b; 
      public A() 
      { 
      a=0; 
      b=0; 
      } 
      } 

когда я создаю экземпляр класса А, как этот

A a11 =new A(); 
A b11 = new A(); 

Теперь, если я меняю значение а11 он никогда не будет изменять значение b11 и если изменить значение b11 него никогда не изменит значение a11.

Будут ли все будущие новые экземпляры класса начинаться с этой переменной в соответствии с тем, что вы установили, без первого вызова класса? если нет, то что происходит?

Нет, они будут установлены значения, которые вы установили в конструкторе класса. В этом случае он устанавливает значения a и b равными нулю для каждого экземпляра класса, потому что это делается конструктором.

Смежные вопросы