Может ли тип быть ссылочным типом и типом значения одновременно? - PullRequest
6 голосов
/ 23 октября 2010

Если нет, и набор ссылочных типов и типов значений являются взаимоисключающими, почему эта компиляция не выполняется:

public static void Do<T>(T obj) where T : struct { }
public static void Do<T>(T obj) where T : class { }

Компилятор утверждает: «Тип уже определяет член с именем« Do »содни и те же типы параметров. ", но T и T здесь не совпадают.Один ограничен структурами, другой ограничен классами.Вызов функции всегда должен быть разрешаем.Есть ли встречные примеры?

Ответы [ 2 ]

3 голосов
/ 23 октября 2010

Общие ограничения не принимаются как часть сопоставления перегрузки. Это то же самое, что и тип возвращаемого значения.

Например, это приведет к одной и той же ошибке (перегрузки отличаются только типом возврата):

public static int Do<T>(T obj) { }
public static bool Do<T>(T obj) { }

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

1 голос
/ 23 октября 2010

Нет, типы никогда не могут быть обоими. Код не выполняется, потому что общие параметры (<T>, то есть не T obj) не имеют понятия «перегрузки». Нет ничего похожего на специализацию шаблонов C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...