fork download
  1. using System;
  2.  
  3. class Animal {
  4. public virtual void talk() {
  5. Console.Write("...\n");
  6. }
  7. }
  8.  
  9. class Cat : Animal {
  10. public override void talk() {
  11. Console.Write("Meow!\n");
  12. }
  13. }
  14.  
  15. class NyanCat : Cat {
  16. // we dont want this one
  17. public virtual void talk() {
  18. Console.Write("NyanNyanNyanNyanNyanNyan Batman!\n");
  19. }
  20. }
  21.  
  22. class Dima : NyanCat {
  23. public override void talk() {
  24. Console.Write("DIMA THE BEST!\n");
  25. }
  26. }
  27.  
  28. public class Test {
  29. public static void Main() {
  30. Animal a = new Animal();
  31. a.talk(); // ...
  32.  
  33. a = new Cat();
  34. a.talk(); // Meow
  35.  
  36. a = new NyanCat();
  37. a.talk(); // Meow
  38.  
  39. a = new Dima();
  40. a.talk(); // Meow
  41.  
  42. // the reason: Cat.print() is not virtual,
  43. // so we have broken the chain of virtuality
  44.  
  45. /********************/
  46.  
  47. // a new chain starts from NyanCat class
  48.  
  49. NyanCat cat = new NyanCat();
  50. cat.talk(); // Batman!
  51.  
  52. cat = new Dima();
  53. cat.talk(); // THE BEST
  54. }
  55. }
Success #stdin #stdout 0.04s 23920KB
stdin
Standard input is empty
stdout
...
Meow!
Meow!
Meow!
NyanNyanNyanNyanNyanNyan Batman!
DIMA THE BEST!