Pergunta

Por exemplo,

int myResult= (new UnmanagedResourceUsingMemorySuckingPig()).GetThingsDone(id);

Não há como usar o bloco, nenhuma maneira óbvia de usar um bloco de uso, nenhuma maneira óbvia de ligar para DisponE (). E, é claro, não managedResourceUsingMemorySuckingPig, implementa idispossáveis.

Foi útil?

Solução

Se o finalizador dessa classe ligar Dispose(), sim. Se não, não.

(editar) Apenas algum informação adicional:

Não assuma que o disposto será chamado. Recursos não gerenciados de propriedade de um tipo também devem ser divulgados em um método finalizado no caso de descartar não ser chamado.

Editar

Para esclarecer a edição acima, vi muitas pessoas (neste tópico, assim e em outros lugares) afirmam que "o GC ligará Dispose() Quando o objeto é removido. "Este não é o caso. Sim, um bom e defensivo codificador escrevendo um componente assumirá que Dispose() Não será chamado explicitamente e o faz no finalizador. No entanto, um bom codificador defensivo usando um componente deve assumir que o finalizador não chama Dispose(). Não há chamada automática de Dispose() no coletor de lixo. Esta funcionalidade está apenas em vigor se o finalizador chama Dispose().

Outras dicas

Eu não acredito que sim. Você terá que escrever:

 using (UnmanagedResourceUsingMemorySuckingPig urumsp = new UnmanagedResourceUsingMemorySuckingPig()) 
{
  myResult= urumsp.GetThingsDone(id);
}

Você só pode ter certeza de que, se tiver um finalizador (destruidor), isso será chamado. Um finalizador pode ligar Dispose() Mas a implementação usual é que o finalizador e Dispose() ligar protected Dispose(bool).

Em outras palavras, depende da implementação de UnmanagedResourceUsingMemorySuckingPig , se seguir as diretrizes, o objeto anônimo será limpo, mas não tão eficiente quanto em um using quadra.

Não. No entanto, o GC acabará coletando o objeto e observará que ele é finalizável (é finalizável, certo?) E finalizá -lo para você. O Dispote é para limpar deterministicamente os recursos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top