Работа с нестатическими членами класса из его статического метода в C#

Считается, что в статических методах нельзя работать с нестатическими членами класса. Однако это не совсем так.

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

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

Однако если в MyStaticMethod передать экземпляр формы и обратиться к label1, как к её полю никаких ошибок не возникнет.

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

Описанный способ имеет естественные ограничения.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *