Feb
14

Quando se cria um método com o mesmo nome de um método da classe herdada, sendo que esse método não possui o modificador virtual é causado um warning, como abaixo:

'Demo.Filha.MetodoNaoVirtual()' hides inherited member 'Demo.Pai.MetodoNaoVirtual()'. Use the new keyword if hiding was intended.

Seu programa vai funcionar corretamente e esse método que foi criado sofrerá um override. Certamente é isso que você queria, mas como corrigir esse warning? É ai que o operado new entra na hitória. Basta adicionar-lo na assinatura do método. Um exemplo vai mais que mil palavras:

   1: public class Pai
   2: {
   3:     public virtual string MetodoVirtual()
   4:     {
   5:         return "MetodoVirtual da classe Pai";
   6:     }
   7:  
   8:     public string MetodoNaoVirtual()
   9:     {
  10:         return "MetodoNaoVirtual da classe Pai";
  11:     }
  12: }
  13:  
  14: public class Filha : Pai
  15: {
  16:     public override string MetodoVirtual()
  17:     {
  18:         return "MetodoVirtual da classe Filha";
  19:     }
  20:  
  21:     public virtual new string MetodoNaoVirtual()
  22:     {
  23:         return "MetodoNaoVirtual da classe Filha";
  24:     }
  25: }
  26:  
  27: public class Neta : Filha
  28: {
  29:     public override string MetodoNaoVirtual()
  30:     {
  31:         return "MetodoNaoVirtual da classe Neta";
  32:     }
  33: }

 

Observe que o método MetodoNaoVirtual da classe Pai não possui o operador virtual. E na classe Filha está havendo uma substituição do método usando operador new e virtual. Não é preciso usar os dois, coloquei para mostrar que na classe Neta o método está sendo substituído sem usar o operador new, isso porque na classe Filha foi adicionado o operador virtual.


Currently rated 3.0 by 1 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

.NET

Tags: ,

Add comment


 

  Country flag

biuquote
Loading



Search


Novidades no seu e-mail


Recent posts

Recent comments

Designer Original Binary Bonsai | Adaptado para MagoDigital | BlogEngine.NET