- •Основы c#. Урок 1. Что такое c#?
- •Основы c#. Урок 2. Что такое net Runtime?
- •Основы c#. Урок 3. Первая программа на c#
- •Основы c#. Урок 4. Переменные языка c#
- •Основы c#. Урок 5. Логические операторы
- •Основы c#. Урок 6. Массивы в c#
- •Основы c#. Урок 7. Операторы if и switch
- •Основы c#. Урок 8. Циклы for и foreach
- •Основы c#. Урок 9. Цикл while
- •Основы c#. Урок 10. Классы в c#
- •Основы c#. Урок 11. Конструкторы классов
- •Основы c#. Урок 12. Наследование
- •Основы c#. Урок 13. Запись в экземпляр базового класса экземпляра производного
- •Основы c#. Урок 14. Вложенные классы
- •Основы c#. Урок 15. Перегрузка бинарных операторов
- •Основы c#. Урок 16. Перегрузка унарных операторов
- •Основы c#. Урок 17. Область видимости
- •Основы c#. Урок 18. Виртуальные функции
- •Основы c#. Урок 19. Абстрактные классы
- •Основы c#. Урок 20. Запрещение наследования или модификатор sealed
- •Основы c#. Урок 21. Статические переменные
- •Основы c#. Урок 22. Статические методы класса
- •Основы c#. Урок 23. Статические конструкторы
- •Основы c#. Урок 24. Закрытые конструкторы или классы без экземпляров
- •Основы c#. Урок 25. Передача параметров переменой длины
- •Основы c#. Урок 26. Строки (класс System.String)
- •Основы c#. Урок 27. Строки (класс StringBuilder)
- •Основы c#. Урок 28. Передача параметров по ссылке и по значению (ref и out)
- •Основы c#. Урок 29. Пример передачи по ссылке
- •Основы c#. Урок 30. Перегрузка
- •Основы c#. Урок 31. Функции класса System.Array
- •Основы c#. Урок 33. События
- •Основы c#. Урок 35. Введение в атрибуты
- •Основы c#. Урок 36. Пример пользовательского атрибута.
- •Основы c#. Урок 37. Параметры командной строки
- •Основы c#. Урок 38. Метод Main в отдельном классе
- •Основы c#. Урок 39. Форматированный вывод
- •Основы c#. Урок 40. Класс System.Object
- •Основы c#. Урок 41. Методы класса System.Object
- •Основы c#. Урок 42. Переопределяем методы класса System.Object
- •Основы c#. Урок 43. Константы
- •Основы c#. Урок 44. Модификаторы доступа
- •Основы c#. Урок 45. Ссылка на текущий экземпляр класса (this)
- •Основы c#. Урок 47. Работаем со специальными папками
- •Основы c#. Урок 48. Получаем список всех дисков
- •Основы c#. Урок 49. Ввод/вывод в c# (System.Io)
- •Основы c#. Урок 50. Классы для работы с папками и файлами
- •Основы c#. Урок 51. Класс Directory
- •Основы c# Урок 52. Класс File
- •Основы c# Урок 53. Класс FileSystemInfo
- •Основы c# Урок 54. Класс DirectoryInfo
- •Основы c# Урок 55. Перечисление FileAttributes
- •Основы c# Урок 56. Класс FileInfo
- •Основы c# Урок 57. Пример: получение имен всех подпапок
Основы c#. Урок 13. Запись в экземпляр базового класса экземпляра производного
В переменной типа базового класса можно хранить и переменные производных класов. Например, текст метода Main из класса Test прошлого урока можно переписать следующим образом:
...
static void Main(string[] args)
{
Worker wrk1 = new Boss();
...
Здесь мы объявили переменную wrk1 типа Worker. Вот другой пример на эту же тему:
Worker wrk1;
Boss boss = new Boss();
wrk1=boss;
...
Здесь мы опять записываем в переменную wrk1 (типа Worker) переменную boss (типа Boss).
Но, несмотря на то, что мы записываем в переменную wrk1 или с помощью оператора new или посредством присваивания экземпляр производного класса, все равно методы производного класса мы использовать не можем (на самом деле из производного класса мы не сможем использовать не только методы, но и переменные)!
Например, в следущие строки выведут на экран 50, а не ноль:
wrk1.setAge(50); //Вызывается метод класса Worker, а не класса Boss
Console.WriteLine("Возраст работника " + wrk1.getAge());
Как с этим бороться, мы рассмотрим на следующем уроке, а пока поясним, почему это может оказаться важным. Например, в вашей фирме есть работники разных типов - программисты, директора, бухгалтера и т. п. Так как у все категорий работников есть что-общее, что вы можете создать базовый класс Worker и производные от него специализированные классы. Далее вы можете в вашей программе объявить массив типа Worker. Так вот, в этом массиве можно будет хранить всех работников (т. е. экземпляры всех классов, производных от класса Worker). И это удобно - одним циклом вы сможете начислить всем зарплату и т. п.
Основы c#. Урок 14. Вложенные классы
Иногда для некоторый класс играет чисто вспомогательную роль для другого класса и используется только внутри него. В этом случае логично описать его внутри существующего класса. Вот пример такого описания:
usingSystem;
namespacetest
{
classClassA
{
//Вложенный класс
private class ClassB
{
public int z;
}
//Переменная типа вложенного класса
private ClassB w;
//Конструктор
public ClassA()
{
w=new ClassB();
w.z=35;
}
//Некоторый метод
public int SomeMethod()
{
return w.z;
}
}
class Test
{
static void Main(string[] args)
{
ClassA v=new ClassA();
int k=v.SomeMethod();
Console.WriteLine(k);
}
}
}
Здесь класс ClassB объявлен внутри класса ClassA. Объявлен он со словом private, так что его экземпляры мы можем создавать только внутри класса ClassA (что мы и делаем в конструкторе класса ClassA). Методы класса ClassA имеют доступ к экземпляру класса ClassB (как, например, метод SomeMethod).
Вложенный класс имеет смысл использовать тогда, когда его экземпляр используется только в определенном классе. Кроме того, при использовании вложеных классов улучшается читаемость кода - если нас не интересует устройство основного класса, то разбирать работу вложенного класса нет необходимости.
Обратите также внимание, как вложенные классы показываются на вкладке ClassView: