前言
大家可以区分清楚方法的重载和方法的重写吗?什么是方法呢?什么时候使用重载呢?什么时候使用重写呢?
方法
方法是在类下写的,方法下的代码只保留最关键的代码,方法的语法为:
[访问修饰符] 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);
}
}
总结
了解方法的重载和重写,重载我们经常会遇到,相对来说也是好理解的,重写一般在多态中,我们需要了解什么是多态,理解方法的重写,多做几个练习。