Você está offline; aguardando reconexão

Como implementar o método Dispose em uma classe derivada no Visual Basic .NET ou no Visual Basic 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 315528
Sumário
Quando você cria uma classe que estende uma classe base, você precisa manipular, de alguma forma, o lançamento de recursos alocados. Para fazer isso, o método Dispose da classe base deve ser substituído em classes derivadas. Este artigo descreve problemas comuns encontrados nesse cenário, como substituir corretamente o método Dispose e destina a esclarecer algumas das sutilezas no seguinte artigo ajuda Visual Basic. NET: Consulte este documento de Ajuda para obter informações detalhadas sobre tratamento de erros e exemplos gerais do método Dispose .
Mais Informações
Uma classe base precisa conter um conjunto sobrecarregado dos métodos Dispose . A primeira instância do código de exemplo que se segue é uma versão sem parâmetros, e a segunda instância aceita um parâmetro booleano:
'Method that is called by Public to ensure TRUE is passed to DisposePublic Overloads Notoverridable Sub Dispose()    Dispose( TRUE )    ' Take yourself off of the finalization queue.    GC.SuppressFinalize(Me)End Sub'Method that does the actual disposal of resourcesProtected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)    'Clean Up ResourcesEnd Sub				

Dispose() é o método que é chamado quando um objeto é descartado no código no qual o objeto foi criado. Isso é um método Public e, portanto, ele pode ser usado quando existe uma instância da classe. O método Dispose() , em seguida, chama o método Dispose(Boolean) e passa um valor de Verdadeiro . O método Dispose(Boolean) é responsável pela limpeza de recursos da classe.
Quando uma classe é derivada de uma classe base, somente o método Dispose(Boolean) precisa ser substituído. Todos os recursos-limpeza para a classe derivada será executada neste método substituído, e em seguida, o método Dispose(Boolean) para a classe base é chamado. A seguir está um exemplo da função substituindo a classe base primitivo:
Protected Overloads Overrides Sub Dispose(disposing As Boolean)   'Clean Up Resources   MyBase.Dispose( disposing )End Sub				
a classe derivada não é necessário um método Dispose() , porque esse método é herdado da classe base. Quando Dispose() é chamado em uma instância da classe derivada, Dispose() usa o Dispose(Boolean) de classe derivada em vez da classe base. Em seguida, é importante que o método de Dispose(Boolean) derivados da classe chama o método Dispose(Boolean) da classe base. Isso é feito por meio do método MyBase.Dispose(disposing) . O método Dispose(Boolean) para a classe base deve ser chamado para garantir que os recursos da classe base também são descartados.
Dispose() serve como um ponto de entrada para acesso público a alienação de um objeto e para garantir que TRUE é passado para o método Dispose(Boolean) . FALSE deve ser passado somente quando o método Dispose(Boolean) é chamado pelo tempo de execução ou o método Finalize . Quando Falso é passado, somente os recursos não gerenciados serão ser descartados. Quando Verdadeiro é passado, os recursos gerenciados e não gerenciados são descartados.
O ambiente de desenvolvimento Visual Studio insere o código para substituir o método Dispose() em uma classe que herda de um objeto do sistema (por exemplo, Inherits System.Windows.Forms.TextBox ). Isso é executado a partir dos menus (na parte superior da janela de código, por padrão) selecionando substituições e, em seguida, clicando em Dispose() . O código é inserido é semelhante a seguinte:
Public Overloads Overrides Sub Dispose()   'Clean Up ResourcesEnd Sub				
se isso for feito, não há erros de compilação são gerados. No entanto, quando a classe derivada é carregada em tempo de execução, você receber uma mensagem de erro em tempo de execução similar à seguinte:
Ocorreu uma exceção sem tratamento do tipo 'System.TypeLoadException' em system.windows.forms.dll.

Obter informações adicionais: declaração referenciada na implementação de método não pode ser um método final. Tipo: ClassLibrary1.UserControl1. Assembly: Dispose.
Observação : O valor de tipo serão diferente que no exemplo anterior. Que é simplesmente o nome da classe que tentou usar um método Dispose() incorretamente substituído.
Para corrigir esse problema, basta sobrecarregar o método Dispose(Boolean) em vez de Dispose() e certifique-se que é feita uma chamada do método Dispose(Boolean) da classe base e que TRUE é passado para ele.

Observação : no Visual Basic .NET ou no Visual Basic 2005, a palavra-chave Overridable é usada como a palavra-chave virtual em translation from VPE for Csharp e C++. Métodos são, por padrão, NotOverridable .
BetaPublic

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 315528 - Última Revisão: 05/11/2007 06:00:47 - Revisão: 2.6

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kberrmsg kbinfo KB315528 KbMtpt
Comentários
m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> ;