Sdílet prostřednictvím


DkmDataContainer Třída

Definice

DkmDataContainer je stavební blok, který se používá v celém tomto rozhraní API. Umožňuje, aby mnoho objektů v tomto rozhraní API obsahovalo "virtuální pole", která jsou přidaná libovolnou komponentou v systému. To se podobá typově bezpečné verzi konceptu expando v jazyce JScript.

Pravidla pro DkmDataContainer:

  1. Všechny 'odkaz' objekty v systému dědí z DkmDataContainer. Referenční objekty jsou sledovány komponentou dispečera tohoto systému a v různých bodech zařazování (spravované–>nativní, nativní, vzdálené>) se identita odkazu na objekt zachová. Objekty Value nedědí z DkmDataContainer, protože systém tyto objekty nesleduje, takže při každém zařazování přechodu se hodnota objektu zkopíruje.
  2. Virtuální pole těchto objektů, které dědí z DkmDataContainer, se nazývají datové položky.
  3. Datové položky jsou PRIVÁTNÍ pro komponentu, která je přidala. Tuto funkci nelze použít ke sdílení polí přes hranice součástí.
  4. Datové položky jsou instance třídy datových položek. Ve spravovaném kódu dědí třídy datových položek z DkmDataItem, aby je identifikovaly jako datové položky. V nativním kódu dědí datové položky z IUnknown.
  5. Obvykle by komponenta nikdy nemusela odebrat položku dat. Důvodem je to, že datové položky se při zavření objektu kontejneru automaticky odeberou.
public ref class DkmDataContainer abstract : MarshalByRefObject
public abstract class DkmDataContainer : MarshalByRefObject
public abstract class DkmDataContainer
type DkmDataContainer = class
    inherit MarshalByRefObject
type DkmDataContainer = class
Public MustInherit Class DkmDataContainer
Inherits MarshalByRefObject
Public MustInherit Class DkmDataContainer
Dědičnost
DkmDataContainer
Dědičnost
DkmDataContainer
Odvozené

Příklady

Příklad třídy datové položky. Ve spravovaném kódu musí položky dat dědit z DkmDataItem třídy AliasLog: DkmDataItem { readonly string LogPath; readonly StreamWriter Writer;

public AliasLog(string log)
{
    LogPath = log;
    Writer = new StreamWriter(log);
}

// Data items can override the 'OnClose' method to receive notification when the data
// container object (DkmClrAlias in our example) is closed.
protected override void OnClose()
{
    Writer.Close();
}

}

Create novou instanci ukázkové třídy položky dat AliasLog log = new AliasLog("c:\foo.log");

datové položky lze předat metodě vytvoření... DkmClrAlias alias = DkmClrAlias. Create("ExampleName"; log);

... nebo ho můžete přidat pomocí aliasu SetDataItem. SetDataItem<AliasLog>(DkmDataCreationDisposition.CreateAlways, protokol);

pak lze hodnotu načíst pomocí GetDataItem AliasLog find = alias. GetDataItem<AliasLog>();

Vlastnosti

IsUnloaded

Vrátí hodnotu true, pokud byla pro tento objekt vyvolána událost unloaded (příklad: DkmThread::Unload je volána) nebo pokud byl objekt uzavřen. Mějte na paměti, že při kontrole tohoto stavu je potřeba střídmět, protože bez synchronizace nemusí být vrácený stav po přečtení přesný.

Metody

GetDataItem<T>()

Získá instanci T, která byla přidána do této instance kontejneru. Pokud tento kontejner neobsahuje T, vrátí tato funkce hodnotu null.

RemoveDataItem<T>()

Odeberte z tohoto kontejneru instanci T. Obvykle není nutné volat tuto metodu, protože kontejner dat se při zavření objektu automaticky vyprázdní.

SetDataItem<T>(DkmDataCreationDisposition, T)

Do kontejneru dat umístěte novou položku.

Platí pro