Программирование с использованием интерфейсов
В приведенном примере сначала мы имеем дело с классом Account (Счет), который поддерживает интерфейс IBasicAccount. В этом случае попытки вызвать методы интерфейса как с помощью указателя на класс, так и указателя на интерфейс, полученного в результате приведения, заканчиваются успешно. Далее мы имеем дело с классом NoAccount. Несмотря на то, что набор методов этого класса идентичен набору методов класса Account (Счет), в его описании не указано, что он реализует интерфейс IBasicAccount.
//NoAccount.h _gc class NoAccount // класс сборщика мусора NoAccount {
При запуске этой программы возникает исключение NullReferenceException. Это происходит при попытке использовать указатель на интерфейс IBasicAccount, полученный в результате динамического приведения указателя на класс NoAccount. (Иными словами, исключение возникает при попытке приведения типа NoAccount * к данным типа указателя на интерфейс IBasicAccount*.) Если бы мы использовали обычное приведение типа в стиле С, то при подобной попытке возникло бы исключение InvalidCastException. Однако уже при компиляции такой программы было бы выдано предупреждение, что использование приведения типов в стиле С не рекомендуется.
balance = 100 balance = 125 balance = 150 balance = 500 balance = 525 IBasicAccount is not supported Value null was found where an instance of an object was required.
Вот перевод выдачи: баланс = 100 баланс =125 баланс = 150 баланс = 500 баланс = 525 IBasicAccount не поддерживается Пустой указатель там, где требуется указатель на объект.