DkmDataContainer Classe

Definição

DkmDataContainer é um bloco de construção usado em toda essa API. Ele permite que muitos dos objetos nessa API contenham "campos virtuais" que são adicionados por qualquer componente no sistema. Isso é semelhante a uma versão de tipo seguro do conceito 'expando' no JScript.

Regras para DkmDataContainer:

  1. Todos os objetos 'reference' no sistema herdam de DkmDataContainer. Os objetos de referência são rastreados pelo componente dispatcher desse sistema e, em vários pontos de marshalling (nativos> gerenciados, gerenciados> nativos, comunicação remota), a identidade de referência do objeto é preservada. Os objetos 'Value' não herdam de DkmDataContainer porque o sistema não rastreia esses objetos, portanto, em qualquer transição de marshalling, o valor do objeto é copiado.
  2. Os 'campos virtuais' desses objetos que herdam de DkmDataContainer são chamados de itens de dados.
  3. Os itens de dados são PRIVATE para o componente que os adicionou. Esse recurso não pode ser usado para compartilhar campos entre os limites do componente.
  4. Os itens de dados são instâncias de uma classe de item de dados. No código gerenciado, as classes de item de dados herdam de DkmDataItem para identificá-las como um item de dados. No código nativo, os itens de dados herdam do IUnknown.
  5. Normalmente, um componente nunca precisaria remover um item de dados. Isso ocorre porque os itens de dados são removidos automaticamente quando o objeto de contêiner é fechado.
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
Herança
DkmDataContainer
Herança
DkmDataContainer
Derivado

Exemplos

Classe de item de dados de exemplo. No código gerenciado, os itens de dados precisam herdar da classe DkmDataItem 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 uma nova instância do log AliasLog da classe de item de dados de exemplo = novo AliasLog("c:\foo.log");

itens de dados podem ser passados para um método create... DkmClrAlias alias = DkmClrAlias. Create("ExampleName", log);

... ou então pode ser adicionado usando o alias SetDataItem. SetDataItem<AliasLog>(DkmDataCreationDisposition.CreateAlways, log);

em seguida, o valor pode ser recuperado usando GetDataItem AliasLog find = alias. GetDataItem<AliasLog>();

Propriedades

IsUnloaded

Retornará true se um evento 'descarregado' tiver sido gerado para este objeto (exemplo: DkmThread::Unload for chamado) ou se o objeto tiver sido fechado. Observe que o cuidado deve ser usado ao verificar esse status, pois, sem sincronização, o status retornado pode não ser mais preciso após a leitura.

Métodos

GetDataItem<T>()

Obtém a instância de 'T' que foi adicionada a essa instância de contêiner. Se esse contêiner não contiver um 'T', essa função retornará nulo.

RemoveDataItem<T>()

Remova a instância de 'T' desse contêiner. Geralmente, é desnecessário chamar esse método, pois um contêiner de dados será esvaziado automaticamente quando o objeto for fechado.

SetDataItem<T>(DkmDataCreationDisposition, T)

Coloque um novo item no contêiner de dados.

Aplica-se a