1 / 21

Microsoft .NET

Microsoft .NET. Первая лекция. COM. Доступ к компонентам только через интерфейсы Назначение уникальных идентификаторов компонентам и интерфейсам Регистрация компонент в реестре Отсутствие привязки к конкретному языку. Java. Выполнение байт-кода на виртуальной машине

lucita
Download Presentation

Microsoft .NET

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Microsoft .NET Первая лекция

  2. COM • Доступ к компонентам только через интерфейсы • Назначение уникальных идентификаторов компонентам и интерфейсам • Регистрация компонент в реестре • Отсутствие привязки к конкретному языку

  3. Java • Выполнение байт-кода на виртуальной машине • Just in time compilation (JIT) • Единая объектная модель • Богатая стандартная библиотека • Обязательная сборка мусора • Кроссплатформенность

  4. Microsoft .NET

  5. Объектная модель • Все типы так или иначе приводимы к object • Существуют типы, передающиеся по ссылке и по значению • Для типов, передающихся по значению, при приведении к object и обратноосуществляются операции boxing/unboxing

  6. object class object { public virtual bool Equals(object obj); public static bool Equals(object objA, object objB); public static bool ReferenceEquals(object objA, object objB); public virtual int GetHashCode(); public Type GetType(); public virtual string ToString (); ~object(); // protected void object.Finalize() protected object MemberwiseClone(); }

  7. Сборка мусора

  8. Сборка мусора

  9. Базовый синтаксис C++/CLI • Объявление типов public ref class RefT {}; public value class ValueT {}; public interface class I {}; public enum class E {}; • Managed-cсылки, выделение памяти Form^ my_form = gcnewForm();

  10. Взаимодействие .NET и Native C/C++ • Platform Invoke [DllImport ("user32.dll")] static extern boolMessageBeep (System.UInt32 type); • Выделение managed/unmanaged-блоков #pragma managed #pragma unmanaged • Умные указатели pin_ptr, interior_ptr, gcroot

  11. Маршаллинг строк static System::String^ ConvertString(const std::string& str) { return ConvertString(str.c_str()); } static System::String^ ConvertString(const char* str) { return gcnew System::String(System::Runtime::InteropServices::Marshal::PtrToStringAnsi( System::IntPtr((void*)str))); } static std::string ConvertString(System::String^ str) { System::IntPtr hg = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str); std::string result(reinterpret_cast<const char*>(hg.ToPointer())); System::Runtime::InteropServices::Marshal::FreeHGlobal(hg); return result; }

  12. pin_ptr – указатель, фиксирующий объект static const intsize = 1000; intmain(array<System::String ^> ^args) { array<int>^arr = gcnew array<int>(size); pin_ptr<int>ptr = &arr[0]; memset(ptr, 0, size * sizeof(int)); // any native fuction return 0; }

  13. interior_ptr – указатель, отслеживающий перемещения объекта void main() { DoLotsOfAllocs(); Test^ t = gcnew Test(); t->m_i = 99; interior_ptr<int> p = &t->m_i; printf("%p %d\r\n",p,*p); // prints "00AC9B3C 99" DoLotsOfAllocs(); printf("%p %d\r\n",p,*p); // prints "00AA8D18 99" }

  14. gcroot – «корневая» ссылка structNative { gcroot<Form^> _form; Native() : _form(gcnewForm()) { } Form^ get_form() { return _form; } }; void native_foo(Native native) { native.get_form()->ShowDialog(); } intmain(array<System::String ^> ^args) { native_foo(Native()); return 0; }

  15. Взаимодействие .NET и COM

  16. Взаимодействие .NET и COM • Генерация managed metadata proxy > tlbimp MyModule.dll\1 • Исходный метод: voidSomeMethod([out, retval] VARIANT_BOOL*); • .NET-метод: boolSomeMethod();

  17. Mono, как opensource-реализация .NET • Работает на Windows, *nix (Linux, *BSD, MacOS и Solaris) • Официально признана Microsoft, как реализация платформы .NET за исключением Windows forms, ASP.NET и ADO.NET • В комплект поставки входит GTK#, как альтернатива Windows Forms

  18. Языки программирования для платформ .NET/Mono • F# (Microsoft research) • Nemerle • Boo • IronPython • A# • Delphi • Etc…

  19. IDE for .NET • Microsoft Visual Studio (C#, C++, VB.NET) • SharpDevelop (C#) • MonoDevelop (C#, C++, VB.NET…) • Eclipse • Borland Developer Studio

  20. Преимущества .NET • JIT-компиляция • Сборка мусора • Богатая информация о сущностях языка (Reflection, Call stack в исключениях и т.д.) • Богатый framework • Переносимость • Прозрачная поддержка большого количества языков • Очень дешёвая разработка

  21. Недостатки .NET • JIT-компиляция (обходится) • Сборка мусора (понимание механизма решает почти все проблемы) • Неполная переносимость • Зависимость от framework’а

More Related