Выполняя что-то почти совершенно неактуальное, в голову вошел вопрос:
Может ли выражение формы obj.GetType().IsInterface
быть истинным в базе кода, состоящей исключительно из кода С#?
Я подозреваю, что ответ отрицательный, потому что:
-
GetType()
всегда будет возвращать тип времени выполнения. - Тип выполнения для конкретных типов соответствует вызываемому конструктору. Таким образом, он никогда не является интерфейсом, потому что интерфейсы не имеют конструкторов.
- Анонимные типы не могут реализовать интерфейс (и если бы они это сделали, у них все равно был бы свой тип анонимного класса).
- Экземпляры внутренних классов других сборок, реализующих общедоступные интерфейсы, по-прежнему будут иметь класс как тип времени выполнения.
- Используя
[ComImport, CoClass(typeof(MyClass))]
на интерфейсе, похоже, что вы можете его создать, но вызов конструктора фактически создает экземпляр ссылочного класса.
Я не могу думать ни о каком другом случае. Я что-то упустил, или я правильно понял?