Форум » C# и платформа .NET » В чем состоит различие между Managed C++ и managed C++? » Ответить

В чем состоит различие между Managed C++ и managed C++?

Сыроежка: Термин managed переводится на русский язык как управляемый. При использовании этого термина с языком программирования C++ обычно имеется в виду применение C++ в среде .Net Framework. Однако следует знать, что Managed C++ и managed C++ - это два различных понятия. managed C++ - это просто указание на то, что язык C++ используется в среде .Net Framework, в то время как Managed C++ - это конкретная спецификация языка C++ для использования его в среде .Net Framework. Причем в настоящее время этот язык, то есть Managed C++, вышел из употребления, и Microsoft заменила его новой спецификацией, имеющей название C++/CLI. Это не просто некоторая косметическая модификация спецификации C++ и смена названий для среды .Net Framework, а, по существу, описание нового языка с новыми ключевыми словами. Увидеть эти существенные различия и сравнить отличия между Managed C++ и C++/CLI можно на примере простой программы. В нижеприведенной программе описан интерфейс с двумя методами и создается иерархия из двух классов, которые наследуют этот интерфейс: абстрактный класс Vehicle и производный от него класс Car. У меня не было возможности скомпилировать код программы, написанном на основе Managed C++, так как, как я уже сказал, этот язык в настоящее время не поддерживается Microsoft. Тем не менее, я надеюсь, что код должен успешно компилироваться, если вы используете более ранние компиляторы MS VC. Итак, как говорится, почувствуйте разницу! Managed C++ [pre2] #using <mscorlib.dll> using namespace System; namespace Lang { __gc __interface ISteering { void TurnLeft(); void TurnRight(); }; __gc class Vehicle abstract : public ISteering { public: void TurnLeft() { Console::WriteLine( "Vehicle turns left." ); } void TurnRight() { Console::WriteLine( "Vehicle turns right." ); } virtual void ApplyBrakes() = 0; }; __gc class Car : public Vehicle { public: void ApplyBrakes() { Console::WriteLine( "Car trying to stop." ); throw new Exception( "Brake failure!" ); } }; } void main() { try { Lang::Vehicle *v = new Lang::Car(); v->TurnLeft(); v->ApplyBrakes(); } catch ( Exception *e ) { Console::WriteLine( e->Message ); } } [/pre2] C++/CLI [pre2] #include "stdafx.h" using namespace System; namespace Lang { interface class ISteering { void TurnLeft(); void TurnRight(); }; ref class Vehicle abstract : ISteering { public: virtual void TurnLeft() { Console::WriteLine( "Vehicle turns left." ); } virtual void TurnRight() { Console::WriteLine( "Vehicle turns right." ); } virtual void ApplyBrakes() = 0; }; ref class Car : Vehicle { public: virtual void ApplyBrakes() override { Console::WriteLine( "Car trying to stop." ); throw gcnew Exception( "Brake failure!" ); } }; } int main() { try { Lang::Vehicle ^v = gcnew Lang::Car(); v->TurnLeft(); v->ApplyBrakes(); } catch ( Exception ^e ) { Console::WriteLine( e->Message ); } return 0; } [/pre2] Код на C++/CLI был скомпилирован с использованием MS VS 2010. Обратите внимание на частое использование двух знаков подчеркивания в ключевых словах Managed C++. Это одна из причин того, что спецификация managed C++ была переписана Microsoft, так как программистов раздражали ключевые слова с двумя начальными знаками подчеркивания, а потому Managed C++ не имел большой популярности. В программе, написанной на Managed C++, функция main объявлена с типом возвращаемого значения void. В C# такое объявление main допускается. Поэтому и в Managed C++ также использовалось такое объявление main. C++/CLI более строго соответствует стандарту C++, а потому функция main в программах, написанных на C++/CLI, должна иметь тип возвращаемого значения int, хотя предложение с return 0; можно не писать, как это допускается в стандартном C++. Используемая здесь демонстрационная программа написана мною на основе примера кода на Managed C++, взятого мною из книги Thuan Kai, Hoang Lain ".NET Framework Essentials", Second Edition.

Ответов - 1

Сыроежка: Я допустил неточность в предыдущем сообщении, поспешив заявить, что у меня не было возможности скомпилировать код программы, написанной на основе Managed C++. На самом деле компилятор MS VC++ 2010 позволяет компилировать код, написанный на Managed C++. Для этого надо в свойствах проекта в разделе "Общие" в пункте "Поддержка общеязыковой среды выполнения" выбрать из предоставляемого перечня опций опцию "CLR-поддержка, старый синтаксис (/clr:oldSyntax)"



полная версия страницы