SlideServe
Menu
Préférences
© SlideServe · v2026

Microsoft .NET

lucita avatar
21 diapositives · 418 Views · Sep 17, 2014

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

Microsoft .NET - slide 1
01 / 21Microsoft .NET
1 / 17

Télécharger la présentation

Microsoft .NET
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  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’а