46233

Шаблоны типа

Доклад

Информатика, кибернетика и программирование

Шаблоны предназначены для кодирования обобщённых алгоритмов без привязки к типам данных. Пример: Необходимо реализовать функцию выполняющую вычисление формулы

Русский

2013-11-20

14.38 KB

0 чел.

Шаблоны типа

Обобщённое программирование —такое описание данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.

Одним из механизмов обобщенного программирования являются шаблоны.

Шаблоны предназначены для кодирования обобщённых алгоритмов, без привязки к типам данных.

Пример: Необходимо реализовать функцию, выполняющую вычисление формулы

2*x + (x*x + 1)/(2*x)

Шаблоны типа

double F(double x) {

 double x2 = 2*x;

 return x2 + (x*x + 1)/x2;

}

int F(int x) {

 int x2 = 2*x;

 return x2 + (x*x + 1)/x2;

}

Для каждого нового типа данных,  участвующего в вычислении выражения,  придется создавать новую функцию F. Вместо этого можно прописать всего один шаблон функции.

Шаблоны типа для C#

Для описания простейшего шаблона достаточно перечислить идентификаторы  типов в угловых скобках после имени  класса или метода:

class Example<T> { /*…*/ }

Шаблон типа:

// Двусвязный список.

public class LinkedList<T> {

 // Узел списка.

 class Node {

   public T data;      // Данные.

   public Node next;    // Cледующий узел.

   public Node prev;    // Предыдущий узел.

 };

Node first;    // Первый узел списка.

 Node last;    // Последний узел списка.

Тип Pair должен иметь корректную реализацию метода ToString для вывода его содержимого в терминал. Тип Pair примет следующий вид:

 struct Pair {

   int x, y;

   public Pair(int x, int y) {

     this.x = x;

     this.y = y;

   }

public override string ToString() {

     return "(" + x + ", " + y + ")";

   }

 }

Ограничения шаблонов типа в C#

Ключевое слово where. Предложение where используется в определении универсального типа для указания ограничений типов, которые могут использоваться в качестве аргументов параметра типа, определенного в универсальном объявлении.

Существуют следующие варианты ограничений:

Ограничения шаблонов типа в C#

Ключевое слово where

• where T: struct

Аргумент типа должен иметь тип значения. Допускается указание любого типа значения, кроме Nullable

• where T : class

Аргумент типа должен иметь ссылочный тип; это также распространяется на тип любого класса, интерфейса, делегата или массива.

• where T : new()

Аргумент типа должен иметь открытый конструктор без параметров. При использовании с другими ограничениями ограничение new()должно устанавливаться последним.

• where T : <base class name>

Аргумент типа должен являться или быть производным от указанного базового класса.

• where T : <interface name>

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

• where T : U

Аргумент типа, предоставляемый в качестве T, должен совпадать с аргументом, предоставляемым в качестве U, или быть производным от него.

Например:

В качестве аргумента шаблона LinkedList могут выступать только классы, наследующие от System.IDisposable.


 

А также другие работы, которые могут Вас заинтересовать

8988. Специфика социального познания 44.5 KB
  Специфика социального познания Проблема истины является одной из древнейших в философии. Сама философия является порождением интенции к истине. Даже этимология термина философия в скрытой форме содержит интерес к истине и истинности вещей и знаний...
8989. Социальное и гуманитарное как методологическая проблема обществознания 36.5 KB
  Социальное и гуманитарное как методологическая проблема обществознания Социально-исторические изменения в обществе, ставшие реальностью сегодняшнего дня, требуют своего философского осмысления и нуждаются в разработке новых методов описания и анализ...
8990. Рефлексия как методология в социально-гуманитарном познании 53 KB
  Рефлексия как методология в социально-гуманитарном познании Методология - это область деятельности, функцией которой является создание и совершенствование интеллектуальных средств организации рефлексивных процессов. Поскольку осознанное отношение к ...
8991. Этические проблемы современной российской науки 54.5 KB
  Этические проблемы современной российской науки Социальное поведение регулируется правом и этикой. Право определяет однозначные общественные отношения, в то время как этика служит вектором поведения в неоднозначных, противоречивых ситуациях, н...
8992. Общие проблемы философии науки 168.5 KB
  Общие проблемы философии науки Вопрос № 13: Идеалы и нормы исследования, их социокультурная размерность и роль в научной деятельности. Ответ на вопрос: Научная деятельность, как и любая другая, руководствуется, во-первых, вполне определенным...
8993. Лекции по философии. Соотношение философии и науки по предмету 262.48 KB
  Лекция № 1. Предмет философии. Основная проблема: соотношение философии и науки по предмету. Цель: определить предмет философии как отношение человека к миру, так что аспекты этого отношения (онтологический, гносеологический и аксиологический) опред...
8994. Определение места философии в жизни человека 362.5 KB
  Определение места философии в жизни человека. Основная часть. Хайдеггер М. Основные понятия метафизики. Мамардашвили М. Как я понимаю философию. Соловьев Вл. Исторические дела философии. Бердяев Н.А. Философия как творческий акт. Приложение. Соловье...
8995. Философия античности. Природа души и ее свойства. Мир идеей и его познание 319 KB
  Философия античности. Основная часть. Платон: Природа души и ее свойства. Мир идеей и его познание. Теоретическое знание и философское познание. Философия как стремление к мудрости. Аристотель: О философии. О началах и причинах вещей. Материя и движ...
8996. Философия Средневековья. Теодицея: причины возникновения зла в мире 263 KB
  Философия Средневековья. Основная часть. О философии. Поиск Бога и доказательство Его бытия. Теодицея: причины возникновения зла в мире. Теория познания: вера и разум. Приложение. Библия: Первая книга Моисеева. Бытие. Время и вечность. О сущем и сущ...