Может ли анонимный тип наследовать от другого типа?

Согласно документации MSDN по свойству StringComparer.OrdinalIgnoreCase:

Свойство OrdinalIgnoreCase фактически возвращает экземпляр анонимного класса, производного от StringComparer класс.

Я не знаком с этой особенностью - анонимными типами с наследованием? Или под «анонимным классом» автор имел в виду просто «внутренний класс, производный от StringComparer, не видимый для клиентского кода»?


person Dan Tao    schedule 26.11.2010    source источник
comment
возможный дубликат Может ли анонимный класс C # реализовать интерфейс?   -  person nawfal    schedule 19.04.2013


Ответы (4)


Если вы посмотрите на исходный код StringComparer, вы увидите, что OrginalIgnoreCase возвращает экземпляр OrdinalComparer, производный от StringComparer.

Я не вижу в этом ничего «анонимного», просто оно внутреннее, поэтому вы не можете увидеть это за пределами фреймворка.

person Will Dean    schedule 26.11.2010
comment
Спасибо, что сделал то, что мне было лень - посмотрел на настоящий источник;) - person Dan Tao; 26.11.2010

Это не анонимный тип в обычном значении этого термина в C #.

Это просто внутренний тип, поэтому вы не знаете его имени: вы не можете ссылаться на точный тип в своем коде.

person Jon Skeet    schedule 26.11.2010
comment
Спасибо; это в основном то, что мне было интересно. Я дал это +1, но принял ответ Уилла, так как он действительно потрудился взглянуть на исходный код (я полагаю, в Reflector). - person Dan Tao; 26.11.2010
comment
Исходный код можно загрузить с MS (хотя их проект с исходными ссылками представляет собой позорную путаницу) - у меня он тоже проиндексирован Windows, так что очень быстро найти такие вещи. referenceource.microsoft.com/netframework.aspx - person Will Dean; 26.11.2010

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

person Andrew Hare    schedule 26.11.2010
comment
Да, было бы неплохо создать анонимный тип, реализующий интерфейс. - person BFree; 26.11.2010

Анонимный тип является анонимным для нас, а не CLR и компилятором. Компилятор использует забавное название, которое включает ‹> в имени, и только компилятор может это сделать! и может быть, Чак Норрис ...

person Aliostad    schedule 26.11.2010
comment
Чак Норрис знает имя анонимного типа. - person Tim Robinson; 26.11.2010
comment
Верно, но я не был уверен, что this - это то, что документация имела в виду под анонимным (тип, сгенерированный компилятором, предоставляемый, например, функцией анонимных типов C #). Оказывается, из ответа Уилла это просто совсем другое значение. - person Dan Tao; 26.11.2010