fork download
  1. using System;
  2.  
  3. public class Test
  4. {
  5. public static void Main(string[] args){
  6. A a = new A();
  7. B b = new B();
  8. a.Attack(b);
  9. }
  10. }
  11.  
  12. abstract class Character {
  13. public void Attack(Character c) {
  14. ((dynamic)this).DoAttack((dynamic)c);
  15. }
  16. }
  17. class A : Character {
  18. public void DoAttack(A a) { Console.WriteLine("A attacks A"); }
  19. public void DoAttack(B b) { Console.WriteLine("A attacks B"); }
  20. public void DoAttack(C c) { Console.WriteLine("A attacks C"); }
  21. }
  22. class B : Character {
  23. public void DoAttack(A a) { Console.WriteLine("B attacks A"); }
  24. public void DoAttack(B b) { Console.WriteLine("B attacks B"); }
  25. public void DoAttack(C c) { Console.WriteLine("B attacks C"); }
  26. }
  27. class C : Character {
  28. public void DoAttack(A a) { Console.WriteLine("C attacks A"); }
  29. public void DoAttack(B b) { Console.WriteLine("C attacks B"); }
  30. public void DoAttack(C c) { Console.WriteLine("C attacks C"); }
  31. }
  32.  
Success #stdin #stdout 0.18s 34416KB
stdin
Standard input is empty
stdout
A attacks B