1. C# / Говнокод #21885

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    class Program
        {
            static void Main()
            {
                object obj = Magic();
                if (obj as B != null)
                    ((B)obj).F();
                else ((C)obj).F();
                Console.ReadKey();
            }
     
            static object Magic()
            {
                if (new Random().Next(0, 10) < 5)
                    return new B();
                else return new C();
            }
        }
     
        abstract class A 
        {
            public virtual void F() { }
        }
        class B : A 
        {
            public override void F()
            {
                Console.WriteLine("B");
            }    
        }
        class C : A 
        {
            public override void F()
            {
                Console.WriteLine("C");
            }
        }

    Новейшие концепции реализации полиморфизма в C#

    Запостил: gvt, 22 Декабря 2016

    Комментарии (14) RSS

    • > new Random()
      Ой-вэй.
      Ответить
    • obj as B != null
      а сделать
      obj is B
      религия не позволяет?
      Ответить
    • а слабо
      A obj = Magic();
      ? зачем нужно тупое приведение типов, если можно работать как с абстрактным классом?
      Ответить
      • гений в треде!!
        ps как бы об этом и пост
        Ответить
      • проблемы ооп-петучей, то ли дело в джаваскрипте
        Ответить
        • кокококококо джаваскрипт умеет ооп
          кокококококо, только оно там не класс ориентированное а прототипориентированное
          кокококококо, это, на самом деле, очень удобно. Смотри:
          // Private variable
          var total = 0;
          
          // Constructor
          function Foo() {
            // access private shared variable
            total++;
          };
          // Expose a getter (could also expose a setter to make it a public variable)
          Foo.prototype.getTotalObjects = function(){
            return total;
          };


          что? тебе не нравится? Ты просто не умеешь!
          Ответить
    • но А должен быть интерфейсом, а не абстрактным классом!
      Ответить

    Добавить комментарий