Может ли анонимный тип наследовать от другого типа?
Согласно документации MSDN на StringComparer.OrdinalIgnoreCase
имущество:
Свойство OrdinalIgnoreCase фактически возвращает экземпляр анонимного класса, производного от класса StringComparer.
Это функция, с которой я не знаком - анонимные типы с наследованием? Или под "анонимным классом" автор просто подразумевал "внутренний класс, производный от StringComparer
, не видимый для клиентского кода "?
4 ответа
Если вы посмотрите на исходный код StringComparer, то увидите, что OrginalIgnoreCase возвращает экземпляр OrdinalComparer, который является производным от StringComparer.
В этом нет ничего "анонимного", что я вижу, просто оно внутреннее, так что вы не можете видеть это вне рамок.
Это не анонимный тип в обычном C# смысле этого термина.
Это просто внутренний тип, поэтому вы не знаете его имя: вы не можете ссылаться на точный тип в вашем коде.
Компилятор может создавать анонимные типы, которые наследуются от другого типа - вы не можете. Это очень плохо, на самом деле, потому что было бы здорово создать анонимный тип на лету, который либо наследует от другого класса, либо реализует интерфейс.
Анонимный тип является анонимным для нас не CLR, а компилятором. Компилятор использует забавное имя, которое включает в себя <>, и только компилятор может это сделать! и, возможно, Чак Норрис...