继承与重写

重载与重写是C#面向对象的多态性的重要体现。

如下面的示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class A
    {
        public virtual void  fun1()
        {
            Console.WriteLine("A.fun1");
        }
        public void fun2(B test)
        { 
            test.fun1();
            fun1();
        }
    }
    public class B:A
    {
        public new void fun1()
        {
            Console.WriteLine("B.fun1");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A yktest = new B();
            B test = new B();
            yktest.fun2(test);
            Console.ReadKey();
        }
    }
}

该例中显式的用new关键字重写方法,因此不会对父类方法进行覆盖。运行结果会是B.fun1  A.fun1.

如果用关键字override则运行结果是B.fun1  B.fun1.

原文地址:https://www.cnblogs.com/ykwang/p/3009539.html