Sdílet prostřednictvím


ExtensibleClassFactory Třída

Definice

Umožňuje přizpůsobení spravovaných objektů, které během vytváření přesahují z nespravovaných objektů.

public ref class ExtensibleClassFactory sealed
public sealed class ExtensibleClassFactory
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ExtensibleClassFactory
type ExtensibleClassFactory = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type ExtensibleClassFactory = class
Public NotInheritable Class ExtensibleClassFactory
Dědičnost
ExtensibleClassFactory
Atributy

Příklady

Zaregistruje delegate objekt, který bude volána vždy, když instance spravovaného typu, který se rozšiřuje z nespravovaného typu, potřebuje přidělit agregovaný nespravovaný objekt. Tento delegate objekt by měl přidělit a agregovat nespravovaný objekt a je volána místo objektu CoCreateInstance. Tato rutina musí být volána v kontextu static inicializátoru pro třídu, pro kterou budou provedena zpětná volání.

public ref class CallBack
{
public:
   IntPtr Activate( IntPtr Aggregator )
   {
      ECFSRV32Lib::ObjectActivator^ oCOM = gcnew ECFSRV32Lib::ObjectActivator;
      ECFSRV32Lib::IObjectActivator^ itf = dynamic_cast<ECFSRV32Lib::IObjectActivator^>(oCOM);
      return (IntPtr)itf->CreateBaseComponent( (int)Aggregator );
   }
};

//
// The EcfInner class. First .NET class derived directly from COM class.
//
public ref class EcfInner: public ECFSRV32Lib::BaseComponent
{
private:
   static CallBack^ callbackInner;
   static void RegisterInner()
   {
      callbackInner = gcnew CallBack;
      System::Runtime::InteropServices::ExtensibleClassFactory::RegisterObjectCreationCallback( gcnew System::Runtime::InteropServices::ObjectCreationDelegate( callbackInner, &CallBack::Activate ) );
   }

   //This is the static initializer.    
   static EcfInner()
   {
      RegisterInner();
   }
};
using System;
using System.Runtime.InteropServices;

public class CallBack
{
   public IntPtr Activate(IntPtr Aggregator)
   {
      ECFSRV32Lib.ObjectActivator oCOM = new ECFSRV32Lib.ObjectActivator();
      ECFSRV32Lib.IObjectActivator itf = (ECFSRV32Lib.IObjectActivator)oCOM;
      return (IntPtr) itf.CreateBaseComponent((int)Aggregator);
   }
}

//
// The EcfInner class. First .NET class derived directly from COM class.
//
public class EcfInner : ECFSRV32Lib.BaseComponent
{
   static CallBack callbackInner;

   static void RegisterInner()
   {
      callbackInner = new CallBack();
      System.Runtime.InteropServices.ExtensibleClassFactory.RegisterObjectCreationCallback(new System.Runtime.InteropServices.ObjectCreationDelegate(callbackInner.Activate));
   }

   //This is the static initializer.
   static EcfInner()
   {
      RegisterInner();
   }
}
Imports System.Runtime.InteropServices

Public Class CallBack
    
    Public Function Activate(Aggregator As IntPtr) As IntPtr
        Dim oCOM As New ECFSRV32Lib.ObjectActivator()
        Dim itf As ECFSRV32Lib.IObjectActivator = _
           CType(oCOM, ECFSRV32Lib.IObjectActivator)
        Return New IntPtr(itf.CreateBaseComponent(Aggregator.ToInt32()))
    End Function
End Class

'
' The EcfInner class. First .NET class derived directly from COM class.
'
Public Class EcfInner
    Inherits ECFSRV32Lib.BaseComponent
    Private Shared callbackInner As CallBack    
    
    Shared Sub RegisterInner()
        callbackInner = New CallBack()
        ExtensibleClassFactory.RegisterObjectCreationCallback( _
           New System.Runtime.InteropServices.ObjectCreationDelegate( _
           AddressOf callbackInner.Activate))
    End Sub    
    
    'This is the static initializer.    
    Shared Sub New()
        RegisterInner()
    End Sub
End Class

Poznámky

Umožňuje ExtensibleClassFactory uživatelům určit delegate , který je volán během vytváření obálky volatelné za běhu (RCW), která poskytuje instanci podkladového objektu COM. V důsledku toho zpětné volání funguje jako objekt třídy objektu COM zabaleného rcw. Bez zpětného volání vytvoří modul CLR (Common Language Runtime) základní objekt COM voláním CoCreateInstancemetody . Toto zpětné volání poskytuje alternativní způsob aktivace podkladového objektu, například pomocí monikeru COM nebo poskytnutím objektu singleton. Metoda RegisterObjectCreationCallback musí být volána v static inicializátoru třídy, která rozšiřuje RCW. Pro každý typ objektu je povoleno pouze jedno zpětné volání vytvoření objektu. Po aktivaci rozšiřitelné rcw se zaregistruje zpětné volání. Když je potřeba vytvořit podkladový objekt COM, zavolá se zpětné volání, které poskytne odkaz na objekt. Zpětné volání musí vrátit IUnknown ukazatel rozhraní pro základní objekt.

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
RegisterObjectCreationCallback(ObjectCreationDelegate)

Registruje delegate , který je volána, když instance spravovaného typu, která se rozšiřuje z nespravovaného typu, potřebuje přidělit agregovaný nespravovaný objekt.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro