Действительно ли возможно в C# перегрузить универсальный оператор броска следующим образом?

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

16
задан LaserJesus 22 June 2009 в 05:30
поделиться

3 ответа

Операторы преобразования не могут быть универсальными. Из раздела спецификации 10.10 приведен формат декларатора-оператора-преобразования:

 декларатора-оператора-преобразования :
 неявный оператор  тип  ( тип   идентификатор )
 явный оператор  тип  ( тип   идентификатор ) 

Сравните это, скажем, с заголовком метода:

заголовком метода : атрибуты opt модификаторы метода opt partial opt тип возвращаемого значения имя-члена список-параметров типа opt ( список формальных параметров opt ) type-parameter-constraints-clauses opt

(Извините за форматирование - не знаю, как это лучше сделать.)

Обратите внимание, что формат оператора не включает список параметров типа или тип ограничения параметров.

20
ответ дан 30 November 2019 в 22:02
поделиться

Your code boils down to the line: return new Foo((U)a.Item)

Where you try to assign a baseclass to an inherited class, which is impossible.

Let's say T (base-class) is of type Stream and U is of type MemoryStream (inherited class), you cannot assign a Stream to a variable of type MemoryStream.

2
ответ дан 30 November 2019 в 22:02
поделиться

Я думаю, что краткий ответ - «Невозможно. Попробуйте вместо этого использовать метод»

Также кажется, что этот вопрос обманут. Решение для ограничения перегруженного оператора в обобщенных шаблонах .NET

0
ответ дан 30 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

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