c#---方法的重载和重写

前言

  大家可以区分清楚方法的重载和方法的重写吗?什么是方法呢?什么时候使用重载呢?什么时候使用重写呢?

方法

  方法是在类下写的,方法下的代码只保留最关键的代码,方法的语法为:

[访问修饰符] static 返回值 方法名([参数列表])  //static 静态方法
{
   方法体
}

如:

public static void show()   
{
    Console.WriteLine("今天天气不错!");
}

  此方法是没有参数(括号里没东西),没有返回值(void)的。

  有了方法之后,写代码就变得简单了。

重载

  方法的重载是指:方法名相同,但是参数的个数和类型不同。方法的重载和返回值无关,和参数的个数和类型有关。
  这里写图片描述
  上图显示的是MessageBox这个方法一共有21个重载,具体使用哪个就看具体的要求了!

重写

  重写方法发生在多态中,此时子类的方法可以和父类的方法名重名,但是会出现一条绿线,这个时候应该怎么做呢?

  可以在父类的方法的修饰符后面加virtual,变成虚方法,在子类方法的修饰符后面加override,重写父类方法。需要注意的是:子类调用了父类的方法,但是把父类的方法进行了重写,更换了方法里面的内容,都不能再加static,此外,虚方法不能与private一起使用。

  也可以在子类的修饰符后面加new,隐藏父类的方法。需要注意的是:无论是否加new,都不影响使用。

扩展–虚方法和抽象方法

虚方法 抽象方法
用virtual修饰 用abstract修饰
要有方法体 不允许有方法体
可以被子类override 必须被子类override
除了密封类都可以写 只能在抽象类中

练习

    public abstract class Animal         //定义一个抽象的父类Animal
    {

        public Animal(string name)
        {
            this._name = name;
        }
        string _name;

        public string name
        {
            get { return _name;}
            set { _name = value;}
        }

        public abstract void Shout();         //父类中的一个抽象的方法Shout
    }

    public class Pig:Animal                   //一个子类Pig继承Animal父类
    {
        public Pig (string name) : base(name)
        {

        }
        public override void Shout()          //子类的Shout方法,重写父类的Shout方法
        {
            Console.WriteLine("{0}哼哼哼哼哼",this.name);
        }
    }

总结

  了解方法的重载和重写,重载我们经常会遇到,相对来说也是好理解的,重写一般在多态中,我们需要了解什么是多态,理解方法的重写,多做几个练习。

猜你喜欢

转载自blog.csdn.net/m0_37508531/article/details/80171887