Существует ли разумный подход к параметрам типа “по умолчанию” в Дженериках C#?

В шаблонах C++ можно определить, что параметр определенного типа является значением по умолчанию. Т.е., если явно не определено, это будет использовать тип T.

Это может быть сделано или приближено в C#?

Я ищу что-то как:

public class MyTemplate<T1, T2=string> {}

Так, чтобы экземпляр типа, который явно не определяет T2:

MyTemplate<int> t = new MyTemplate<int>();

Был бы по существу:

MyTemplate<int, string> t = new MyTemplate<int, string>();

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

80
задан el2iot2 1 April 2009 в 23:51
поделиться

3 ответа

Разделение на подклассы является наилучшим вариантом.

Я разделил бы Ваш основной универсальный класс на подклассы:

class BaseGeneric<T,U>

с определенным классом

class MyGeneric<T> : BaseGeneric<T, string>

Это помогает сохранить Вашу логику в одном месте (базовый класс), но также и легкий предоставить обе возможности использования. В зависимости от класса существует, вероятно, очень мало дополнительной работы, должен был заставить это произойти.

72
ответ дан Reed Copsey 24 November 2019 в 10:00
поделиться

C# не поддерживает такую функцию.

Как Вы сказали, можно разделить его на подклассы (если это не изолируется, и копируйте все объявления конструктора), но это - совершенно другая вещь.

8
ответ дан Mehrdad Afshari 24 November 2019 в 10:00
поделиться

К сожалению, C# не поддерживает то, что Вы пытаетесь сделать. Это была бы трудная функция для реализации, учитывая, что тип по умолчанию для параметра должен будет придерживаться универсальных ограничений и скорее всего создал бы головные боли, когда CLR пытался гарантировать безопасность типов.

1
ответ дан Andrew Hare 24 November 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: