ID do artigo: 315528 - Última revisão: sexta-feira, 11 de maio de 2007 - Revisão: 2.6

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

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

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:
http://msdn2.microsoft.com/en-us/library/fs2xkftw(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/fs2xkftw(vs.71).aspx)
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 Dispose
Public 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 resources
Protected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)
    'Clean Up Resources
End 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 Resources
End 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 .

Referências

Tópicos relacionados da Ajuda :

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palavras-chave: 
kbmt kbvs2005swept kbvs2005applies kberrmsg kbinfo KB315528 KbMtpt
Tradução automáticaTradução automática
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  (http://support.microsoft.com/kb/315528/en-us/ )