Динамический объект Intellisense

Если динамическое преобразование разрешается в объект во время компиляции, и все типы.NET расширяют объект, почему динамическое не действует как объект в отношении IntelliSense? Всякий раз, когда я использую динамический, я получаю сообщение "динамическое выражение. Это будет решено во время выполнения". Конечно, он также должен отображать элементы объекта?

3 ответа

Решение

Intellisense не работают в динамическом типе. Это решается во время выполнения. Динамический тип работает для статических типов, а также для анонимных типов.

Если бы intellisense сработал, он бы бросил вызов самой цели динамичности.

Я думаю, что вы должны прочитать ответ Джона Скита о object vs dynamic Вот

Я подозреваю, что он не предоставляет эти члены, потому что может быть произвольное количество перегрузок для любого из методов на object - что он, очевидно, не может знать во время intellisense. Таким образом, это может быть отображение неверной информации о значении для определенного вызова метода.

В конечном счете, потому что все динамические операции используют динамическую диспетчеризацию, то есть не компоновку во время компиляции, и поэтому на самом деле нет никакой гарантии, что какой-либо элемент действительно будет существовать - даже ToString - потому что динамический слой объекта может свободно перехватывать / заменять / удалять даже основные операции object, В результате для окна intellisense попытка отобразить что-либо было бы неискренним.

Да, он составлен как object, но это больше, потому что (почти) все объекты object (или может быть упакован как таковой), и поэтому среда выполнения знает, что, каким бы ни был динамический объект, его можно хранить как ссылку на объект.

Но если вы хотите использовать object или, если вы хотите, чтобы intellisense показывал их, вам нужно object первое - что само по себе было бы динамичной операцией.

Это не значит, что нельзя отображать элементы intellisense для динамических языков, конечно, это так (я верю, что это может сделать Iron Python), просто в C# это не так - и вполне разумно.

Другие вопросы по тегам