Компилятор C# выдаёт ошибку CS0120 с текстом «Для нестатического поля, метода или свойства требуется ссылка на объект» в тот момент, когда код обращается к члену класса через имя самого класса, а не через созданный экземпляр. Типичный сценарий: внутри статического метода Main разработчик пытается напрямую прочитать обычное поле класса, и сборка проекта останавливается с этим сообщением.

Ошибка относится к числу самых частых у начинающих программистов на C#, особенно у тех, кто переходит с процедурных языков или только осваивает объектно-ориентированное программирование. Хорошая новость: причина всегда одна и та же, и исправляется она за пару минут, если понимать разницу между статическими и нестатическими членами класса.

Что означает ошибка CS0120

Каждый класс в C# — это шаблон, а объекты (экземпляры) создаются по этому шаблону оператором new. Нестатическое поле существует только внутри конкретного экземпляра: у двух объектов одного класса значения этого поля могут отличаться. Поэтому компилятор требует указать, чьё именно поле вы хотите прочитать или изменить.

Сообщение «требуется ссылка на объект» буквально говорит: передайте экземпляр, к которому относится обращение. Без ссылки компилятор не знает, из какого объекта брать значение, и прерывает компиляцию.

💡

CS0120 возникает, когда к нестатическому члену класса обращаются без экземпляра. Решений два: создать объект либо сделать член статическим.