#c# #generics
#c# #общие
Вопрос:
Я часто вижу:
public interface IFoo<TWidget> where TWidget : ISomethingElse { }
В этом случае TWidget — это то же самое, что использовать общий T, правильно? Я нахожу это удивительно сложным для Google или поиска в спецификациях. Я на 99% уверен, что T любые другие символы — это то же самое, что произносить просто T, но хотел быть абсолютно уверенным.
Ответ №1:
Имя параметра универсального типа может быть любым допустимым именем идентификатора.
В большинстве документации вы действительно нашли бы, T
куда вы вставили TWidget
.
Из MSDN:
Присваивайте параметрам общего типа описательные имена, если только имя из одной буквы не говорит само за себя и описательное имя не добавит ценности.
Комментарии:
1. Ах, тот факт, что это универсальное, определяется тем, где оно находится, а не соглашением об именовании. Оглядываясь назад, все это кажется очень очевидным.
Ответ №2:
В этом случае TWidget является универсальным, но не потому, что это T something . Хотя рекомендуется называть это T something , это может быть что угодно, главное, чтобы это было синтаксически правильное имя идентификатора типа.
Ответ №3:
Как вы подозреваете, совершенно законно размещать любой идентификатор там, где вы обычно видите T
.
Вы часто будете видеть более описательные имена, когда на общий тип накладываются ограничения, обычно указывающие, каким может быть ограничение. Также полезно иметь более длинный идентификатор, когда у вас есть несколько параметров универсального типа, чтобы вы могли легко запомнить, какой из них какой.
Ответ №4:
Параметр Type может называть что угодно, но стандартный способ сделать это — использовать T, а затем перейти по алфавиту, поскольку требуются более общие типы.
Итак, у вас может быть public interface IFoo<T, U> where T : ISomethingElse { }
Но вы могли бы так же легко использовать public interface IFoo<Banana, Spiggot>
. Это действительно не имеет значения