Общие ограничения в C #, T — это тот же TSomethingElse, верно?

#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> . Это действительно не имеет значения