Академический Документы
Профессиональный Документы
Культура Документы
Обобщения
Кроме обычных типов фреймворк .NET также поддерживает
обобщенные типы (generics), а также создание обобщенных методов. Чтобы
разобраться в особенности данного явления, сначала посмотрим на
проблему, которая могла возникнуть до появления обобщенных типов.
Посмотрим на примере. Допустим, мы определяем класс для представления
банковского счета. К примеру, он мог бы выглядеть следующим образом:
1 class Account
2 {
5 }
2 {
3 account1.Id = 2;
4 account2.Id = "4356";
7 Console.WriteLine(id1);
8 Console.WriteLine(id2);
2 {
5 }
4 account2.Id = "4356";
8 Console.WriteLine(id2);
2 account2.Id = "4356";
2 {
3 T id = default(T);
4 }
Статические поля обобщенных классов
При типизации обобщенного класса определенным типом будет
создаваться свой набор статических членов. Например, в классе Account
определено следующее статическое поле:
1 class Account<T>
2 {
4
7 }
2 Account<int>.session = 5436;
3
5 Account<string>.session = "45245";
6
7 Console.WriteLine(Account<int>.session); // 5436
8 Console.WriteLine(Account<string>.session); // 45245
2 {
7 }
Здесь класс Transaction использует два универсальных параметра.
Применим данный класс:
1 Account<int> acc1 = new Account<int> { Id = 1857, Sum = 4500 };
3
5 {
6 FromAccount = acc1,
7 ToAccount = acc2,
8 Code = "45478758",
9 Sum = 900
10 };
2 {
4 {
5 int x = 7;
6 int y = 25;
9
10 string s1 = "hello";
11 string s2 = "bye";
12 Swap<string>(ref s1, ref s2); // или так Swap(ref s1, ref s2);
14
15 Console.Read();
16 }
18 {
19 T temp = x;
20 x = y;
21 y = temp;
22 }
23 }
https://www.youtube.com/watch?v=xOQnDqf8N-I&feature=youtu.be
Упражнения
Упражнение 1
Что неправильно в следующем коде? Исправьте его:
1 class Instantiator<T>
2 {
3 public T instance;
4 public Instantiator()
5 {
6 instance = new T();
7 }
8 }
Упражнение 2
Напишите обобщенный класс, который может хранить в массиве
объекты любого типа. Кроме того, данный класс должен иметь методы для
добавления данных в массив, удаления из массива, получения элемента из
массива по индексу и метод, возвращающий длину массива.
Для упрощения работы можно пересоздавать массив при каждой
операции добавления и удаления