Почему C# и VB имеют Дженерики? Какое преимущество они предоставляют? Дженерики, FTW

Вы можете использовать следующее правило в htaccess для перезаписи субдомена во вложенную папку:

RewriteEngine On

 #If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 #Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Строка за строкой Объяснение:

  RewriteEngine on

Строка выше сообщает серверу включите движок для переписывания URL-адресов.

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

Эта строка является условием RewriteRule, в котором мы сопоставляем HTTP-узел с использованием шаблона регулярного выражения. Условие говорит, что если хост является sub.domain.com, тогда выполните правило.

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Правило соответствует http://sub.domain.com/foo и внутренне перенаправляет его на http://sub.domain.com/folder/foo .

Замените sub.domain.com на ваш поддомен и папку с именем папки, которую вы хотите чтобы указать ваш поддомен.

6
задан swilliams 19 September 2008 в 04:50
поделиться

15 ответов

C# и VB имеют дженерики для использования в своих интересах поддержки дженериков в базовом CLR (или наоборот?). Они позволяют Вам писать код статически типизированный язык INA, который может относиться больше чем к одному виду типа, не переписывая код для каждого типа, Вы используете их для (время выполнения сделает это для Вас), или иначе использование Системы. Объект и бросающий везде (как мы имели отношение к ArrayList).

Вы читали статью?

Эти языки также имеют дженерики:

  • C++ (через шаблоны)
  • Ada (через шаблоны)
  • Eiffel
  • D (через шаблоны)
  • Haskell
  • Java
6
ответ дан 8 December 2019 в 05:24
поделиться

Лично я - огромный поклонник дженериков из-за всего кода, который я не должен писать.

Что такое Инверсия Управления?

0
ответ дан 8 December 2019 в 05:24
поделиться

В цели-C можно использовать протоколы для достижения целей дженериков. Так как язык со слабым контролем типов однако, это обычно - не такое же большое беспокойство как тогда, когда Вы боретесь с системой типов для использования одного пути выполнения кода для многих типов.

0
ответ дан 8 December 2019 в 05:24
поделиться

Java также имеет дженерики. C++ имеет шаблоны.

Динамические языки как Perl и JavaScript не имеют тех же ограничений типа, таким образом, они извлекают главным образом ту же пользу с меньшим количеством работы.

0
ответ дан 8 December 2019 в 05:24
поделиться

Типичным примером являются наборы. например, ряд типа T, поскольку Добавление (T) метод и T получает () метод. Тот же код, другой тип безопасные наборы.

У C++, D, Ada и других есть шаблоны, надмножество дженериков, которые делают это, немного другой ошибки получает тот же конечный результат (и затем некоторые).

Java IIRC имеет дженерики, но я не делаю Java.

0
ответ дан 8 December 2019 в 05:24
поделиться

Они увеличивают производительность для наборов с помощью типов значения, так как никакая упаковка/распаковывание не будет требоваться. Они являются намного более чистыми для использования, так как Вы не должны будете бросать объект (например, использование ArrayList) к желаемому типу - и аналогично они помогают осуществить безопасность типов.

1
ответ дан 8 December 2019 в 05:24
поделиться

Самый легкий способ объяснить это состоит в том, чтобы дать пример. Скажите желание двух хеш-таблиц, та, которая отображает объекты строки типа ввести интервал и тот, который отображает объекты строки типа ввести дважды. Вы могли определить Хеш-таблицу и затем использовать K и V типов. Без дженериков необходимо было бы использовать 'объектный' тип, который, в дополнение к необходимости быть брошенным, чтобы быть значимым, бросает typesafety. Просто инстанцируйте Хеш-таблицы и Хеш-таблицы, и у Вас есть свои хеш-таблицы с надлежащим typechecking и так далее.

0
ответ дан 8 December 2019 в 05:24
поделиться

Самое большое преимущество дженериков по не универсальные типы в C# (не Java, Java является другой историей), то, что они намного быстрее. JIT генерирует лучший машинный код, который он может придумать для данного типа. List<int> на самом деле список ints и не целочисленных объектов, переносящих интервал. Это делает универсальные типы удивительно быстро и также безопасный с точки зрения типов, который может помочь Вам обнаружить потрясающую партию ошибок во время компиляции :)

1
ответ дан 8 December 2019 в 05:24
поделиться

Дженерики, основываются на понятии шаблонов в C++, если Вы знакомы с ними.

Это - способ реализовать алгоритм или структуру данных, но задержка фактического типа это используется на.

Список может затем быть присвоен с любым типом по Вашему выбору интервал, строка и даже пользовательские типы, которые тип присвоен на конструкции списка. Но Вы сможете использовать операции списка, добавляют, удаляют и т.д.

Можно действительно сохранить большое кодирование усилия путем привыкания к дженерикам. И Вы не должны упаковывать и распаковывать между типами.

Java имеет дженерики также. Их называют подстановочными знаками.

1
ответ дан 8 December 2019 в 05:24
поделиться

Дженерики в.NET превосходны для объектных наборов. Можно определить тип объекта однако, Вы хотите и смочь иметь, скажем, Список, не пишущий кода для этого и иметь доступ ко всей эффективной функциональности универсального набора Списка.NET будучи безопасными с точки зрения типов к T. Это - большой материал.

1
ответ дан 8 December 2019 в 05:24
поделиться

Рассмотрите эти сигнатуры методов:

//Old and busted
public abstract class Enum
{
  public static object Parse(Type enumType, string value);
}
//To call it:
MyEnum x = (MyEnum) Enum.Parse(typeof(MyEnum), someString);

//New and groovy
public abstract class Enum
{
  public static T Parse<T>(string value);
}

//To call it:
MyEnum x = Enum.Parse<MyEnum>(someString);

Мама взгляда: Никакое управление типом выполнения.

3
ответ дан 8 December 2019 в 05:24
поделиться

Из MSDN:

Дженерики предоставляют решение ограничения в более ранних версиях общеязыковой среды выполнения и языка C#, на котором обобщение выполняется путем кастинга типов к и от универсального Объекта базового типа. Путем создания универсального класса можно создать набор, который безопасен с точки зрения типов во время компиляции.

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

2
ответ дан 8 December 2019 в 05:24
поделиться

Вероятно, наиболее популярный способ использования их имеет ArrayLists со строгим контролем типов. В.NET 1.1, необходимо было бы или бросить все от объекта до желаемого Типа или использовать что-то как CodeSmith для генерации ArrayList со строгим контролем типов.

Кроме того, они помогают уменьшить упаковку. Снова, в.NET 1.x, если бы Вы пытались использовать ArrayList с Типом Значения, Вы закончили бы тем, что упаковали и распаковали объекты повсеместно. Дженерики избегают что, позволяя Вам определить Тип, или Ссылку или Значение.

Существует другое удобное использование для них также, обработчиков событий, запросов LINQ, и т.д.

2
ответ дан 8 December 2019 в 05:24
поделиться

Лично, я думаю, что они позволяют экономить много времени. Я все еще использую Платформу.NET 1.1 и каждый раз, когда Вы хотите определенный набор, необходимо создать набор со строгим контролем типов путем реализации CollectionBase. С Дженериками просто необходимо объявить набор как этот List<MyObject> и это сделано.

5
ответ дан 8 December 2019 в 05:24
поделиться

Дженерики в .NET, как наследование и дополнительные методы, допускают сокращение дублирования кода. Позвольте мне объяснить посредством рефакторинга.

Если все классы с общим предком имеют общепринятую методику, помещают общепринятую методику в общего предка классов (наследование).

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

Если приблизительно несколько методов или классов имеют тот же код, который отличается только типами, на которые реагируют (особенно, где детали типа не относятся к операции метода), соберите те методы или классы в дженерик.

1
ответ дан 8 December 2019 в 05:24
поделиться