توريث، تجميع، و الاحتواء
reusability COM في إطار عمل.NET هو accomplهوhed من خلال توريث. مشاركة أنواع COM في وراثة كأساس فئة. استخدم طرازات توريث التجميع أو الاحتواء الظروف التالية:
طراز |
استخدم عن |
---|---|
الوراثة |
يتعرض لكائن مدار كـ الكائن الخارجي. |
تجميع |
تمكين الكائن الخارجي إلى كشف تطبيق واجهة بدون تعديل كائن آخر. |
الاحتواء |
تمكين الكائن الخارجي إلى تعديل سلوك الكائن الداخلي. |
الوراثة
عندما يتعرض الواجهات التي تتم إدارتها إلى COM، فإنها دائماً توسيع IUnknown أو IDهوpatch ، حتى عند الواجهة هو موروثة من واجهة أخرى تشغيل الجانب المدارة. يتم تطبيق قاعدة نفس إلى واجهات فئة المكونة للفئات المدارة.
توسيع إطار عمل.NET طراز COM ل reusability بواسطة إضافة تطبيق توريث. مدارة أنواع يمكن اشتقاق مباشر أو غير مباشر من COM coclass؛ وبشكل أكثر تحديداً، فإنها يمكن أن ينحدر من برنامج تضمين الاستدعاء وقت التشغيل التي تم إنشاؤها بواسطة وقت التشغيل. يمكن كشف نوع مشتق الجميع خصائص والأسلوب كائن COM الإضافة إلى أساليب وخصائص تطبيق في التعليمات البرمجية المدارة. الكائن الناتجة هو تنفيذها جزئيا في تعليمات برمجية مُدارة وتنفيذها جزئيا في التعليمات البرمجية غير المدارة.
إلى تأهيل كفئة أساسية، يجب coclass:
أن creatable
أن المتجمع (في the COM sense)
يمكن توسيع RCW ل coclass مؤهل الأنواع المدارة وتجاوز الأساليب التي يوفرها الأساس الكائن. يجب يمنع الجميع الأساليب الأساسية لواجهة إذا أردت إلى يمنع أي من الطرق.
يرث نوع مدارة من RCW بالطريقة نفسها التي يرث من كائن أساسية التي تمت إدارتها. في المثال التالي تعليمات برمجية، Catapultفئة مشتقة من مدارة AcmeLib.Slingshot، COM نوع.
#using "AcmeLib.dll" // Provides definition of Slingshot.
__gc class Catapult : public AcmeLib.Slingshot // Extends the COM type.
{
// Delegates to base implementation.
Load() { //… };
Fire()
{
// Engages in some behavior before delegating to the base
// implementation.
Slingshot::Fire();
}
// The Aim method needs to be overridden.
Aim() { //… }
}
Catapult *cp = new Catapult();
// Calls derived implementation.
cp->Load();
// Calls base implementation.
cp->Aim();
// Calls derived which delegates to base.
cp->Fire();
تجميع
إلى كشف واجهات لفئة COM واحد كما لو أنها تم تنفيذها تشغيل فئة COM ثاني، الفئة ثانية تجمع الأولى. يمكن لكائن COM تجميع.NET كائن، وفي هذه الحالة الجميع الواجهات للكائن، واجهة الفئة الخاصة به، بما في ذلك متوفرة من خلال الكائن الخارجي. الداخلي.NET كائن التفويضات استدعاءات التي لها وظائف IUnknown إلى التحكم من IUnknown.
تجميع هو قليلاً أكثر تعقيداً من الاحتواء (وصفها في مقطع التالي). وعادة ما يستخدم إلى تمكين الكائن الخارجي إلى كشف تطبيق واجهة بدون تعديل كائن آخر. تعتمد الجميع الالكائنات المدارة التجميع النمط COM تلقائياً مع كائن مدار المستخدمة كـ الكائن الداخلية. إلى تجميع كائن مدار، قم بإنشاء الكائن الخارجي غير مدار الكائن الداخلية التي تتم إدارتها عن طريق استدعاء CoCreateInstance، ثم قم بتمرير الكائن الخارجي IUnknown كمعلمة OuterUnknown. عند الخارجية من IUnknown هو التي تم تمريرها إلى كائن مدار أثناء الإنشاء، كائن مدار ذاكرات التخزين المؤقت للواجهة ويستخدم كالتالي:
الخارجية كائن تحتوي على الداخلي IUnknown ل nondelegating من IUnknown. nondelegating من IUnknown يتصرف كما يتصرف على عادي من IUnknown؛ التي هو، تنجح في حالة تنفيذ الواجهة الكائن وفشل otherwهوe. لا إعادة توجيه nondelegating من IUnknown يتصل إلى كائن خارجي.
إذا كان الكائن الداخلي هو الاستعلام عن واجهة أنه لا يعتمد، الكائن الداخلي المفوضون استدعاء الواجهة IUnknown الخارجي للكائن.
الجميع المكالمات إلى تفويض QueryInterface AddRef وأساليب الإصدار من الكائن الداخلي إلى الكائن الخارجي من IUnknown.
تجعل هذه السلوكيات ثلاثة من الممكن إلى تجميع أي كائن مدار. مع ذلك نوع من علاقة التراكم، فمن الممكن أن كائن COM مفرد يتم تنفيذها جزئيا في تعليمات برمجية المدارة (الجزء الداخلي) وجزئياً في تعليمات برمجية غير المدارة (الجزء الخارجي).
الاحتواء
يمكن أن يتضمن كائن.NET كائن COM "باستيراد بيانات التعريف الخاص به في تجميع.NET، ثم التصريح عضو بيانات من هذا النوع ضمن فئة أخرى. كما مع الاحتواء COM العادي، يمكنك استدعاء واجهات لكائن COM في تطبيقات واجهة خاصة بك، ولكن كائن مضمن هو لا يتعرض خارج الفئة. الاحتواء هو أسهل من التجميع. أنت تستخدم نموذجياً الاحتواء عندما يحتاج الكائن الخارجي إلى تعديل سلوك الكائن الداخلي. إلى تنفيذ ذلك، الكائن الخارجي بساطة إنشاء مثيل من الكائن الداخلي في construcإلىr الخاص به، و المفوضون المكالمات إلى الكائن الداخلية حسب الضرورة. يمكن اختيار الكائن الخارجي الذي يستدعي تفويض و الذي يستدعي إلى hوle مباشرة. وقت التشغيل قد لا توجد متطلبات خاص من أجل كائنات إلى تدعم الاحتواء.
يمكن أن تحتوي على كائن COM كائن.NET. Behavior مع respect إلى clients of the COM كائن هو exactly the same كـ if the contained كائن was أي غير ذلك COM كائن.
راجع أيضًا:
المبادئ
يتعرض لمكونات COM إلى.NET Framework
يتعرض لبرنامج.NET Framework مكونات إلى COM