Создание обобщенных структур (и классов)

Создание обобщенных структур (и классов)

Теперь, когда вы понимаете, как определять и вызывать обобщенные методы, давайте рассмотрим построение обобщенных структур (процедура построения обобщенных классов оказывается аналогичной). Предположим, что мы построили гибкую структуру Point, поддерживающую один параметр типа, который представляет единицу хранения координат (х, у). Вызывающая сторона может создавать типы Point‹T› так.

// Point с использованием int.

Point‹int› p = new Point‹int›(10, 10);

// Point с использованием double.

Point‹double› p2 = new Point‹double›(5.4, 3.3);

Вот полное определение Point‹T›, необходимое нам для дальнейшего анализа.

// Обобщенная структура Point.

public struct Point‹T› {

 // Обобщенные данные

 private T xPos;

 private T yPos;

 // Обобщенный конструктор.

 public Point (T xVal, T yVal) {

  xPos = xVal;

  yPos = yVal;

 }

 // Обобщенные свойства.

 public T X {

  get {return xPos;}

  set {xPos = value;}

 }

 public T Y {

  get { return yPos; }

  set { yPos = value; }

 }

 public override string ToString() {

  return string.Format("[{0}, {1}]", xPos, yPos);

 }

 // Переустановка полей со значениями параметра типа,

 // принятыми по умолчанию.

 public void ResetPoint() {

  xPos = default(T);

  yPos = default(T);

 }

}

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Проблема обобщенных указателей

Из книги Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса автора Гусаров Михаил

Проблема обобщенных указателей Что такое обобщенные указатели и почему они полезны Представим себе некий объект, который имеет перегруженную операцию operator->(). Мы можем его представить себе как некий обобщенный указатель, который не является указателем в полном смысле


Создание обобщенных методов

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

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


Создание пользовательских обобщенных коллекций

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Создание пользовательских обобщенных коллекций Итак, пространство имен System.Collections.Generic предлагает множество типов, позволяющих создавать эффективные контейнеры, удовлетворяющие требованиям типовой безопасности. С учетом множества доступных вариантов очень велика


Создание обобщенных базовых классов

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Создание обобщенных базовых классов Перед рассмотрением обобщенных интерфейсов следует указать на то, что обобщенные классы могут быть базовыми для других классов и могут таким образом определять любое число виртуальных и абстрактных методов. Однако производные типы


Создание обобщенных интерфейсов

Из книги VBA для чайников автора Каммингс Стив

Создание обобщенных интерфейсов Вы уже видели при рассмотрении пространства имен System.Collections. Generiс, что обобщенные интерфейсы в C# также допустимы (например, IEnumerable‹Т›). Вы, конечно, можете определить свои собственные обобщенные интерфейсы (как с ограничениями, так и без


Замечание о пустоте структур

Из книги C++ для начинающих автора Липпман Стенли

Замечание о пустоте структур Предусловие в процедуре создания (конструкторе) make класса STACK1 требует комментария. Оно устанавливает n>=0 и, следовательно, допускает пустые стеки. Если n=0, то make вызовет процедуру создания для массивов, также имеющую имя make, с аргументами 1 и 0


1.3.4. Создание классов

Из книги Программирование на языке Ruby автора Е.А. Роганов, Н.А. Роганова Е.А. Роганов, Н.А. Роганова

1.3.4. Создание классов В Ruby есть множество встроенных классов, и вы сами можете определять новые. Для определения нового класса применяется такая конструкция:class ClassName# ...endСамо имя класса - это глобальная константа, поэтому оно должно начинаться с прописной буквы.


11.2.4. Создание параметрических классов

Из книги Разработка ядра Linux автора Лав Роберт

11.2.4. Создание параметрических классов Изучи правила, потом нарушай их. Басё Предположим, что нужно создать несколько классов, отличающихся только начальными значениями переменных уровня класса. Напомним, что переменная класса обычно инициализируется в самом


Создание модулей классов

Из книги автора

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


2. Модификация и создание пользовательских классов

Из книги автора

2. Модификация и создание пользовательских классов Ruby является объектно-ориентированным языком программирования. Давайте рассмотрим особенности представления классов.Объекты и классыВ реальной жизни все объекты обладают индивидуальными свойствами. Но, введя


Заполнение структур

Из книги автора

Заполнение структур Структуры заполняются таким образом, чтобы каждый ее элемент имел естественное выравнивание. Например, рассмотрим следующую структуру данных на 32- разрядной машине.struct animal_struct { char           dog; /* 1 байт */ unsigned long  cat; /* 4 байт */ unsigned short pig; /* 2 байт


Инициализация структур

Из книги автора

Инициализация структур Структуры необходимо инициализировать, используя метки полей. Это позволяет предотвратить некорректную инициализацию при изменении структур. Это также позволяет выполнять инициализацию не всех полей. К сожалению, в стандарте C99 принят довольно


Ограничения на параметры обобщенных подпрограмм и классов

Из книги автора

Ограничения на параметры обобщенных подпрограмм и классов По умолчанию с переменными, имеющими тип параметра обобщенного класса или подпрограммы, внутри методов обобщённых классов и обобщенных подпрограмм можно делать лишь ограниченный набор действий: присваивать и