Похожие презентации:
Параметризованные классы
1.
Параметризованные классы2.
• Кроме обычных типов фреймворк .NETтакже поддерживает обобщенные типы
(generics), а также создание обобщенных
методов.
3.
• Определение класса для представлениябанковского счета:
• Класс Account определяет два свойства: Id уникальный идентификатор и Sum - сумму
на счете.
• Идентификатор задан как числовое
значение, то есть банковские счета будут
4.
• Нередко для идентификатора используютсяи строковые значения.
• На момент написания класса можно точно
не знать, что лучше выбрать для хранения
идентификатора - строки или числа.
• Либо, возможно, этот класс будет
использоваться другими разработчиками,
которые могут иметь свое мнение по
данной проблеме.
5.
• Так как тип object является универсальнымтипом, от которого наследуется все типы,
соответственно в свойствах подобного типа
можно сохранить и строки, и числа:
6.
• Затем этот класс можно было использоватьдля создания банковских счетов в
программе:
7.
• Обобщенные типы позволяют указатьконкретный тип, который будет
использоваться.
• Класс Account можно определить как
обобщенный:
8.
• Угловые скобки в описании classAccount<T> указывают, что класс является
обобщенным, а тип T, заключенный в угловые
скобки, будет использоваться этим классом.
• Необязательно использовать именно букву T, это
может быть и любая другая буква или набор
символов.
• Параметр T в угловых скобках еще
называется универсальным параметром, так как
вместо него можно подставить любой тип.
9.
• Например, вместо параметра T можноиспользовать объект int, то есть число,
представляющее номер счета.
• Это также может быть объект string, либо
или любой другой класс или структура:
10.
• Поскольку класс Account являетсяобобщенным, то при определении
переменной после названия типа в угловых
скобках необходимо указать тот тип,
который будет использоваться вместо
универсального параметра T.
• В данном случае объекты Account
типизируется типами int и string:
11.
• Поэтому у первого объекта account1свойство Id будет иметь тип int, а у объекта
account2 - тип string.
• При попытке присвоить значение свойства
Id переменной другого типа возникает
ошибка компиляции:
12.
Значения по умолчанию• Иногда возникает необходимость
присвоить переменным универсальных
параметров некоторое начальное значение,
в том числе и null.
• Можно использовать оператор default(T).
• Он присваивает ссылочным типам в
качестве значения null, а типам значений значение 0:
13.
Статические поля обобщенныхклассов
• При типизации обобщенного класса
определенным типом будет создаваться
свой набор статических членов.
• Например, в классе Account определено
следующее статическое поле:
14.
• Теперь типизируем класс двумя типами intи string:
15.
Использование несколькихуниверсальных параметров
• Обобщения могут использовать несколько
универсальных параметров одновременно,
которые могут представлять различные
типы:
16.
• Здесь класс Transaction использует двауниверсальных параметра.
• Применим данный класс:
17.
Обобщенные методы• Кроме обобщенных классов можно также
создавать обобщенные методы, которые
точно также будут использовать
универсальные параметры.
18.
19.
Вопросы для самопроверки• Что такое упаковка (boxing) и распаковка
(unboxing)?
• Что не так в следующем коде?
20.
Упражнение 1• Что неправильно в следующем коде? Исправьте его:
class Instantiator<T>
{
public T instance;
public Instantiator()
{
instance = new T();
}
}
21.
Упражнение 2• Напишите обобщенный класс, который может
хранить в массиве объекты любого типа. Кроме
того, данный класс должен иметь методы для
добавления данных в массив, удаления из
массива, получения элемента из массива по
индексу и метод, возвращающий длину
массива.
• Для упрощения работы можно пересоздавать
массив при каждой операции добавления и
удаления
Программирование