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