Какой результат будет у следующей программы и почему?
class Person { int retirementAge = 60; public static void ChangeRetirementAge(int years) { retirementAge += years; } public void DisplayRetirementAge() { Console.WriteLine(retirementAge); } } class Program { static void Main(string[] args) { Person tom = new Person(); Person.ChangeRetirementAge(5); tom.DisplayRetirementAge(); Console.Read(); } }
Программа не скомпилируется, потому что статические методы имеют доступ только к статическим полям. Нестатические поля класса не могут использоваться в статических методах.
Дана следующая программа:
class Person { public static int retirementAge = 60; int _age; static Person() { Console.WriteLine($"Начальный пенсионный возраст: {retirementAge}"); } public Person(int age) { _age = age; } public void Display() { if (_age >= retirementAge) Console.WriteLine("Вы уже на пенсии"); else Console.WriteLine($"До пенсии осталось {retirementAge - _age} лет"); } } class Program { static void Main(string[] args) { Person tom; tom = new Person(34); Person.retirementAge = 65; tom.Display(); Console.ReadKey(); } }
При выполнении какой строки кода в методе Main будет вызван конструктор класса Person?
Статический конструктор вызывается либо при создании самого первого объекта класса, либо при первом обращении к статическим членам класса. В данном случае статический конструктор класса Person будет вызван при выполнении строки кода
tom = new Person(34);