C # Видимость частных членов - PullRequest
13 голосов
/ 19 января 2010

У нас есть студенческий класс в нашей бизнес-модели. что-то показалось мне странным, если мы манипулируем одним учеником другого ученика, его личные члены видны ... это выглядит немного неприлично

   class Program {
      static void Main(string[] args) {

         Student s1 = new Student();
         Student s2 = new Student();

         s1.ExamineStudentsMembers(s2);
      }
   }

   public class Student {

      private String _studentsPrivateMember;

      public Student() {
         _studentsPrivateMember = DateTime.Now.Ticks.ToString();
      }

      public void ExamineStudentsMembers(Student anotherStudent) {
         //this seems very wrong
         Console.WriteLine(anotherStudent._studentsPrivateMember);
      }
   }

Могу ли я подумать о конструктивных соображениях / последствиях этого. Кажется, что вы не можете скрыть информацию от своих братьев и сестер. Есть ли способ пометить поле или элемент как скрытые от других экземпляров того же класса?

Ответы [ 11 ]

0 голосов
/ 19 января 2010

Нет, это необходимо, код метода не специфичен для экземпляра, он специфичен только для типа объекта. (виртуальные методы) или объявленный тип переменной (для не виртуальных методов). Нестатические поля, с другой стороны, зависят от конкретного экземпляра ... Вот где у вас есть изоляция на уровне экземпляра.

Единственная разница между статическим методом и нестатическим методом состоит в том, что статическому методу не разрешен доступ к другим экземплярам (нестатическим) методам или полям. Любой метод, который МОЖЕТ быть сделан статическим без изменения, не будет затронут каким-либо образом, делая его статическим, за исключением того, что компилятор будет выдавать ошибки везде, где он вызывался с использованием синтаксиса на основе экземпляров.

...