DkmDataContainer Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
- 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.
- Os 'campos virtuais' desses objetos que herdam de DkmDataContainer são chamados de itens de dados.
- 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.
- 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.
- 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. |