Пример #1
0
        static void Main(string[] args)
        {
            Overrider overrider = new Overrider();
            BaseClass b1        = overrider;

            overrider.Foo(); //Overrider.Foo     //重写会改变我的这个方法或属性
            b1.Foo();        //Overrider.Foo     //重写会改变我的这个方法或属性

            Hider     hider = new Hider();
            BaseClass b2    = hider;

            hider.Foo(); //Hider.Foo     //new关键字重写会改变我的这个方法或属性
            b2.Foo();    //BaseClass.Foo     //new关键字但不会改变我原本的这个方法或属性
        }
        public static void Main(string[] args)
        {
            Overrider over = new Overrider();
            BaseClass b1   = over;

            over.Foo();
            b1.Foo();

            Hider     h  = new Hider();
            BaseClass b2 = h;

            h.Foo();
            b2.Foo();
        }
Пример #3
0
        static void tstHiding()
        {
            //The differences in behavior between Overrider and Hider are demonstrated in the following code:
            Overrider over = new Overrider();
            BaseClass b1   = over;

            over.Foo(); // Overrider.Foo
            b1.Foo();   // Overrider.Foo

            Hider     h  = new Hider();
            BaseClass b2 = h;

            h.Foo();  // Hider.Foo
            b2.Foo(); // BaseClass.Foo
        }
Пример #4
0
        static void Main(string[] args)
        {
            var       over = new Overrider();
            BaseClass b1   = over;

            over.Foo();
            b1.Foo();

            var       h  = new Hider();
            BaseClass b2 = h;

            h.Foo();
            b2.Foo();

            Console.ReadKey();
        }
Пример #5
0
    public static void Main()
    {
        Overrider over = new Overrider();
        BaseClass b1   = over;

        over.Foo();
        b1.Foo();

        Console.WriteLine();

        Hider     h  = new Hider();
        BaseClass b2 = h;

        h.Foo();
        b2.Foo();
    }
Пример #6
0
        static void tstHiding() {
            //The differences in behavior between Overrider and Hider are demonstrated in the following code:
            Overrider over = new Overrider();
            BaseClass b1 = over;

            over.Foo(); // Overrider.Foo
            b1.Foo(); // Overrider.Foo

            Hider h = new Hider();
            BaseClass b2 = h;

            h.Foo(); // Hider.Foo
            b2.Foo(); // BaseClass.Foo
        }
Пример #7
0
        static void Main(string[] args)
        {
            Stock msft = new Stock
            {
                Name = "MSFT",
                SharesOwned = 1000L
            };
            Console.WriteLine(msft.Name);
            Console.WriteLine(msft.SharesOwned);
            Console.WriteLine(msft);

            House mansion = new House
            {
                Name = "Mansion",
                Mortgage = 250000M
            };
            Console.WriteLine(mansion);
            Console.WriteLine(mansion.Name);
            Console.WriteLine(mansion.Mortgage);
            Console.WriteLine(mansion.Liability);

            // polymorphism
            Display(msft);
            Display(mansion);

            // Upcast : implicitly upcast to a base class reference
            Asset a = msft;
            // True :
            Console.WriteLine(a == msft);
            // OK :
            Console.WriteLine(a.Name);
            // Error: SharesOwned undefined
            // Console.WriteLine(a.SharesOwned);

            // Downcast : explicitly downcast to a subclass reference
            Stock s = (Stock)a;
            // <No error>
            Console.WriteLine(s.SharesOwned);
            // True :
            Console.WriteLine(s == a);
            // True :
            Console.WriteLine(s == msft);

            // as operator performs a downcast that evaluates to null (rather than throwing
            // an exception) if the downcast fails
            Asset asserNull = new Asset();
            Stock t = asserNull as Stock;
            // t is null; no exception thrown
            Console.WriteLine(t?.SharesOwned);

            // new versus override
            Overrider over = new Overrider();
            BaseClass b1 = over;
            over.Foo();
            // Overrider.Foo
            b1.Foo();
            // Overrider.Foo

            Hider h = new Hider();
            BaseClass b2 = h;
            h.Foo();
            // Hider.Foo
            b2.Foo();
            // BaseClass.Foo

            // Boxing : convert a value-type instance to a reference-type instance
            int x = 9;
            // box the int into an object
            object obj = x;
            // Unboxing : cast the object back to the original value type
            // Unboxing : requires an explicit cast
            int y = (int)obj;
            x = 5;
            // changing the value of x doesn’t change its previously boxed copy
            Console.WriteLine(obj); // 9
        }