Artigo: 315528 - Última revisão: sexta-feira, 11 de Maio de 2007 - Revisão: 2.6

Como implementar o método Dispose numa 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 | Reduzir tudo

Sumário

Quando criar uma classe que expande uma classe base, terá de alguma forma processar a versão do recursos atribuídos. Para efectuar este procedimento, o método de venda/abate da classe base deve ser substituído em classes derivadas. Este artigo aborda problemas comuns encontrados neste cenário, como substituir correctamente o método de venda/abate e deve clarificar alguns com as subtilezas 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 o tratamento de erros e para obter exemplos gerais sobre o método de venda/abate .

Mais Informação

Uma classe base tem de conter um conjunto de métodos de venda/abate sobrecarregado. A primeira ocorrência do código de exemplo que se segue é uma versão sem parâmetros, e a segunda ocorrê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 é chamado quando um objecto é eliminado no código em que o objecto foi criado. Este é um método Public e por isso pode ser utilizado quando existe uma instância da classe. O método de Dispose() , em seguida, chama o método Dispose(Boolean) e passa um valor de TRUE . O método Dispose(Boolean) é responsável pela limpeza os recursos da classe.
Quando uma classe é derivada de uma classe base, apenas o método Dispose(Boolean) tem de ser substituído. Todos os recursos-limpeza para a classe derivada serão executadas neste método substituídas e, em seguida, o método Dispose(Boolean) para a classe base é chamado. Segue-se um exemplo da função substituir 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() , uma vez que esse método é herdado da classe base. Quando é chamado Dispose() numa instância da classe derivada, Dispose() utiliza Dispose(Boolean) de classe derivada em vez de na classe base. Em seguida, é importante que o método Dispose(Boolean) da classe derivada chama o método Dispose(Boolean) da classe base. Isto é feito através do método MyBase.Dispose(disposing) . O método de Dispose(Boolean) para a classe base tem de ser chamado para garantir que os recursos da classe base também são abatidos.
Dispose() destina-se como um ponto de entrada para acesso público a venda/abate de um objecto e para garantir que Verdadeiro é transmitida para o método Dispose(Boolean) . Falso devem ser passados apenas quando o método Dispose(Boolean) é chamado pelo método Finalize ou tempo de execução. Quando Falso é transmitida, vão ser eliminados apenas os recursos não geridos. Quando Verdadeiro é transmitida, ambos os recursos geridos e não geridos são eliminados.
O ambiente de desenvolvimento Visual Studio insere o código para substituir o método Dispose() para uma classe que herda um objecto de sistema (por exemplo, Herda System.Windows.Forms.TextBox ). É efectuada de menus (na parte superior da janela de código, por predefinição) seleccionando a ignorar e, em seguida, clicando em Dispose() . O código que é inserido tem um aspecto semelhante ao seguinte:
Public Overloads Overrides Sub Dispose()
   'Clean Up Resources
End Sub
				
se isto é efectuado, sem erros de compilação são elevados. No entanto, quando a classe derivada é carregada durante a execução, receberá uma mensagem de erro de runtime semelhante à seguinte:
Ocorreu uma excepção não processada do tipo 'System.TypeLoadException' no system.windows.forms.dll.

Obter informações adicionais: declaração faz referenciada numa implementação de método não pode ser um método final. Tipo: ClassLibrary1.UserControl1. Assemblagem: a venda/abate.
Nota : O valor de tipo será diferente do que no exemplo anterior. É apenas o nome da classe que tentou utilizar um método Dispose() incorrectamente substituído.
Para corrigir este problema, basta sobrepor-se o método Dispose(Boolean) em vez de Dispose() e certifique-se que é efectuada uma chamada para o método Dispose(Boolean) da classe base e que Verdadeiro é transmitida ao mesmo.

Nota : no Visual Basic .NET ou Visual Basic 2005, a palavra-chave Overridable é utilizada como a palavra-chave virtual no C# e C++. Métodos são, por predefinição, NotOverridable .

Referências

Tópicos de ajuda relacionados :

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )