C#中方法重载与方法重写区别

来源:互联网 发布:mac中国官网 编辑:程序博客网 时间:2024/06/06 00:37

方法重载:在一个类中存在方法名相同、参数列表不同(参数个数或者参数类型不同)、返回值类型可以不相同,调用的时候根据参数列表的不同来正确调用。

class Program
    {
       public static void Main(string[] args)
        {  
            Program test = new Program();
            Console.WriteLine("3+5两个整数之和为{0},3+5+7三个整数之和为{1},3.1+5.2两个浮点型数之和为{2}", test.add(3, 5), test.add(3, 5, 7), test.add(3.1, 5.2));
         }
        public int add(int i, int j)
        {          
               return i + j;       
        }
        public int add(int i, int j, int k)
        {           
               return i + j + k;       
        }
        public double add(double i, double j)
        {           
               return i + j;       
        }  
    }

 

方法重写:是指子类重新定义父类函数的方法,要求父类和子类中方法名称相同、参数列表不同(参数个数或者参数类型不同)和返回值类型相同。

虚方法重载就是在基类中的方法用virtual关键字来标识,然后在继承类中对该类进行重写(override),这样基类中的方法已经被重写了,已经失去了功能了。当让基类的对象的引用直接指向继承类的对象时(多态性),调用该方法则是调用的继承类的方法。

方法隐藏:无论基类中的方法是否用了virtual关键字,继承类中都可以用new关键字(如果不用new的话,不会产生错误,但会生成一个编译警告)将基类中的方法隐藏,重写就是原来的(基类中)已经不存在了,而隐藏是原来的还存在。所以当让基类的对象的引用直接指向继承类的对象时(多态性),调用该方法则是调用的基类的方法。

基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。访问父类则调用父类的方法,访问子类则调用子类的方法。
 class Program{
        static void Main(string[] args)
        {
            Console.WriteLine("父类方法:");
            Base b = new Base();
            b.Print();
            b.Display();
            Console.WriteLine("子类方法:");
            Derived d = new Derived();
            d.Print();
            d.Display();
            Console.WriteLine("把子类对象赋值给父类对象之后的方法显示:");
            b = d;
            Console.WriteLine("父类方法:");
            b.Print();          
            b.Display();
            Console.WriteLine("子类方法:");
            d.Print(); 
            d.Display();
        }
    }
    class Base{
        public void Display(){
            Console.WriteLine("Display in Base");
        }
        public virtual void Print(){
            Console.WriteLine("Print in Base");
        }
    }
    class Derived : Base{
        new public void Display()
        {
            Console.WriteLine("Display in Derived");
        }
        public override void Print(){
            Console.WriteLine("Print in Derived");
        }
    }

结果:

 

原创粉丝点击