Статические члены класса

Последнее обновление: 27.07.2018
Вопрос 1

Какой результат будет у следующей программы и почему?

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();
	}
}

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

Вопрос 2

Дана следующая программа:

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);
Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850