classA{publicvoidTeste(){Console.WriteLine("teste de A");}}classB:A{publicvoidTeste(){Console.WriteLine("teste de B");}}classClass1{///<summary>///Themainentrypointfortheapplication.///</summary>[STAThread]staticvoidMain(string[]args){Aa=newB();a.Teste();Console.Read();}}
Isso é para quem está achando q C# = JAVA e está querendo aproveitar de estar estudando para o SCJP e fazer um certificação em C#
Se você tá pensando que vai aprender C# estudando Java, só porque C# é “parecido” com Java, se prepare meu amigo, porque você vai cair do cavalo. C# é muito mais parecido com C++ e essas outras coisas bizarras do que com Java.
Estude os dois separados, porque não tem muita coisa haver não, a não ser a herança simples. O resto é C++ com um garbage collector e algumas classes com nomes parecidos com as de Java.
pcalcado
Maurício Linhares:
Vai escrever:
Vai!?? C# nao tem binding dinamico de metodos?!?
Mauricio_Linhares
Tô dizendo que a coisa é bizarra…
Tem que colocar override pra poder “sobrepor” o método da classe pai:
Quando você “reimplementa” um método numa classe filha e chama usando uma referência pra classe pai, ele chama o método da classe pai, a não ser que você tenha usado esse “override” aí em cima. É estranho, ninguém me disse ainda a utilidade dessa tosqueira, mas é assim né, fazer o que… :roll:
As vezes, quando você “sobrepõe” um método de outra classe sem fazer esse “override” as IDEs dão um aviso, dizendo que o “campo” pode estar escondido (por causa da declaração na classe pai). Em .Net propriedades, métodos e variáveis dentro de objetos são todos “campos”.
fcmartins
Maurício Linhares:
Tô dizendo que a coisa é bizarra…
Tem que colocar override pra poder “sobrepor” o método da classe pai:
Quando você “reimplementa” um método numa classe filha e chama usando uma referência pra classe pai, ele chama o método da classe pai, a não ser que você tenha usado esse “override” aí em cima. É estranho, ninguém me disse ainda a utilidade dessa tosqueira, mas é assim né, fazer o que… :roll:
As vezes, quando você “sobrepõe” um método de outra classe sem fazer esse “override” as IDEs dão um aviso, dizendo que o “campo” pode estar escondido (por causa da declaração na classe pai). Em .Net propriedades, métodos e variáveis dentro de objetos são todos “campos”.
Em Delphi funciona assim, deve ser coisa do Hejlsberg. O método se comporta como estático/classe sem o ser.
pcalcado
Aff…
Cara, isso e coisa de C++, uma das mais criticadas. Nao acredito que nao corrigiram isso. EU tenho C# como uma linguagem bem razoavel (assim como java), mas isso abalou consideravelmente minha perspectiva :roll:
Queria ver o que o Meyer diria disso…
<editado>Uhhhmmm… que coisa, amterial apra leitura enquanto o sono nao passa e o chefe nao chega</editado>
Shoes
ranophoenix
coisas da Micro$oft :lol:
Gerson
E aí Mauricio, olha, eu ão vejo nada bizarro… ele te dá mais opções apenas.
virtual/não virtual, overriding, hiding com new, etc, etc…
Para quem está acostumado com Java isso pode parecer confuso pq muitas coisas ficam implicitas… por ex, metodos em java sao todos virtuais por default… (claro, tirando static, final)… esse ‘override’ q vc comentou é pq por default ele faz hiding dos metodos…
E em C# vc pode ter mtas combinações desses modificadores…
Mauricio_Linhares
E aí Mauricio, olha, eu ão vejo nada bizarro… ele te dá mais opções apenas.
virtual/não virtual, overriding, hiding com new, etc, etc…
Para quem está acostumado com Java isso pode parecer confuso pq muitas coisas ficam implicitas… por ex, metodos em java sao todos virtuais por default… (claro, tirando static, final)… esse ‘override’ q vc comentou é pq por default ele faz hiding dos metodos…
E em C# vc pode ter mtas combinações desses modificadores…
Me dê um bom uso pra isso, ainda não encontrei.
chicocx
acho apenas que java nao é c#, nem aqui nem na china …
Kleber_Santos
concordo com chicocx
c# != java totalmente,
microsoft ecassss :evil: :evil: :evil:
furutani
Gerson:
ele te dá mais opções apenas.
virtual/não virtual, overriding, hiding com new, etc, etc…
Para quem está acostumado com Java isso pode parecer confuso pq muitas coisas ficam implicitas… por ex, metodos em java sao todos virtuais por default… (claro, tirando static, final)
Só por curiosidade… o que é virtual/não virtual?
e esse hiding com new, o q vem a ser?
Gerson
furutani:
Gerson:
ele te dá mais opções apenas.
virtual/não virtual, overriding, hiding com new, etc, etc…
Para quem está acostumado com Java isso pode parecer confuso pq muitas coisas ficam implicitas… por ex, metodos em java sao todos virtuais por default… (claro, tirando static, final)
Só por curiosidade… o que é virtual/não virtual?
e esse hiding com new, o q vem a ser?
Procure por Virtual Method Invocation, late binding, polimorfismo…
Bom, ‘Hiding’ de um método é vc esconder (!= sobrepor) a versao de um outro método com a mesma assinatura derivada da superclasse.
Em Java, por ex, isso acontece com métodos estáticos, e daí nao existindo overriding, e sim, hiding (ou Shadowing).
Ps.: lembre-se de q em metodos estaticos vc nao tem acesso ao ‘super’, tendo que chamar através de Classe.metodoEstatico().