Может ли анонимный тип наследовать от другого типа? - PullRequest
8 голосов
/ 26 ноября 2010

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

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

Это функция, с которой я не знаком - анонимные типы с наследованием? Или под «анонимным классом» автор просто подразумевал «внутренний класс, производный от StringComparer, невидимый для клиентского кода»?

Ответы [ 4 ]

9 голосов
/ 26 ноября 2010

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

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

7 голосов
/ 26 ноября 2010

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

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

4 голосов
/ 26 ноября 2010

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

3 голосов
/ 26 ноября 2010

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

...