Разработка приложений на языке C#. Полезные настройки. Особые спецификаторы формата, страница 6

ClassName obj = new ClassName();

При вызове обычного метода в него всегда (неявно) передается ссылка на вызывающий объект. Она носит имя this. При вызове статического метода в него не передается ссылка на вызывающий объект. Обычный метод работает для объекта this. Статический метод работает просто потому, что его вызвали, он не имеет ссылки на конкретный объект this. Статический метод (обычно public) можно рассматривать как инструмент, спрятанный в классе и доступный в любой момент в своем или в чужом классе.

Различия между статическим и обычным полями данных

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

Например, количество объектов, или способ сортировки объектов класса Человек должны быть static. Обычное поле данных обслуживает объект класса. Каждый объект имеет свою копию этого поля. Например, поле name класса Человек. Статические поля называют class variables (переменные класса), а обычные — instance variables (переменные объекта). Предположим, что объявлен и создан объект alex класса Man, а в классе Man объявлены две переменные:

public static int count;

public int age;

·  Man.count. Так можно обратиться к статической переменной (в любом методе любого класса).

·  alex.age. Так можно обратиться к обычной переменной (в любом методе любого класса). alex — объект класса Man.

·  count. Так можно обратиться к статической переменной (в любом методе своего класса). Вариант: this.count.

·  age. Так можно обратиться к обычной переменной (в любом методе своего класса). Вариант: this.age.

Задание

Добавьте статический метод TestSwitch для проверки новых возможностей оператора switch. В нем cоздайте бесконечный цикл ввода, который просит пользователя ввести строку текста (string s) и выводит ответную строку ans. Используйте switch для текстовой строки!!! Это невозможно в С++. Погрузите в цикл (ищите команду контекстного меню Surround with...) какой-нибудь бред, например:

switch (s.ToUpper())  // Приводим к верхнему регистру и разветвляемся в зависимости от значения строки символов

{

  case "I":    ans = "My";     break;

  case "YOU":  ans = "Your";   break;

  case "HE": ans = "His";   break;

  case "SHE":  ans = "Her";   break;

  case "Q":    ans = "Leaving"; break;

  default:  ans = "We need a pronoun!"; break;

}

Console.WriteLine (ans);

if (ans == "Leaving")

  break;

Работа со строками

Это задание рекомендую выполнить дома. Palindrome (перевертень) — строка символов, которая одинаково читается справа-нелево и слева-направо. Греческий палиндром: "Niψon anomhmata mh monan oψin" (означает "Очисти свои грехи, не только лицо") был выгравирован во многих старых церквях от Кембриджа до Константинополя. Рок-группа Black Sabbath назвала альбом 1983 года "Live Evil". Вспомните также группу ABBA с песней "SOS". Вот образцы современных палиндромов: "A man, a plan, a canal Panama" (посвящен создателю панамского канала Leigh Mercer), "Niagara, O roar again", "A Santa lived as a devil at NASA", "Doc, note. I dissent. A fast never prevents a fatness. I diet on cod", "Nurse, I spy gypsies. Run", "Sex at noon taxes", "Do geese see god". Французы тоже умеют составлять палиндромы: "Eh, ça va, la vache" ("Как дела, корова?"). Создайте статический метод IsPalindrome, который проверяет строку на присутствие свойства Palindrome.

public static bool IsPalindrome (string s)       // Здесь подсказки. Постарайтесь ими не пользоваться

   {

      for (int i = 0; i < s.Length / 2; i++)