Экземпляр класса и производные классы могут косвенно изменять статический член класса через нестатический метод в c # - PullRequest
0 голосов
/ 31 марта 2012
public class Class1
{
  public static string Name="foo";

  public void ChangeName(string _name)
  {
    Name=_name;
  }
}

in some other class..

Class1 _c=new Class1();
_c.ChangeName("bar");

и имя меняется ... экземпляр, изменяющий статический член!

Я думал, что статический член доступен только для класса. Если класс хочет, он может изменить свои статические члены. Но здесь экземпляр может изменить его косвенно. Разве экземпляр не может изменить его? Когда мы создаем экземпляр, он занимает свое собственное пространство в куче, не имея доступа к статическим членам класса. Так что на самом деле здесь происходит?

Ответы [ 3 ]

1 голос
/ 31 марта 2012

Важная часть

public static string Name="foo";

, который создает изменяемое статическое свойство. Это позволяет

Class1.Name="bar"

с вне класса, а также с внутри класса - внутри класса вы можете сократить это значение до

Name="bar"

именно так и называется через ChangeName("bar")

Возможно, вы захотите рассмотреть

public static readonly string Name="foo";

EDIT

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

0 голосов
/ 31 марта 2012

MSDN четко заявляет:

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

0 голосов
/ 31 марта 2012

Нет, экземпляр не защищен от доступа к статическим элементам.Экземпляры отделены друг от друга, но статические члены доступны как для статических методов, так и для методов экземпляров.

Поскольку вы сделали его общедоступным, к нему могут обращаться не только методы самого класса.Вы можете изменить его из любого места:

in some other class...

Class1.Name = "Albert";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...