首先,知道什么是方法?
- 方法是由 方法签名 和一系列语句的代码块 组成。
- 方法签名包括方法的访问级别(如:public 或private)、可修饰符(如:static 或者abstract或者virtual。。)、方法名称和参数。
方法分类
1).静态方法:
被static关键字修饰的方法,成为静态方法,此时的静态方法属于类级别,不能通过类的实例进行访问,只能通过方法所在的类名字点出来这个静态方法名字。下面的代码演示静态方法的定义和调用:
2).实例方法:
相反,实例方法就是方法前面不加关键字static,直接通过new运算符,实例化一个对象后,通过创建的对象来点出来,实例方法;而且,它是不能通过类名字点出来实例方法的。
下面的代码演示实例方法的定义和调用:
重载
- 指的是方法的方法名相同,但是参数列表(参数的类型,参数的个数,参数顺序)不一样,这些方法互称为方法的重载
重载是平行的。是一个类的内部的方法名称一样,参数列表不一样的多个方法,以实现不同的需求(相同的功能)。
下面的代码演示方法重载得到的一些方法:
是重载的如下:
重写
- 重写是垂直的。是子类(派生类)对父类(基类)同名方法的重新实现。
- 由于父类的方法不能够完成某种功能,但是还必须得调用这个方法,则子类可以重写父类中的这个方法,加强其功能。
在父类里面,如果一个方法可以让子类重写,必须在方法的返回类型前面用virtual、abstract、voerride(继承了父类的虚方法)关键字来修饰。说明这个方法可以被子类重写。
下面的代码演示方法重写得到的一些方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _001基础
{
class Program
{
static void Main(string[] args)
{
Animal horse = new Horse();
horse.Voice();
Animal sheep = new Sheep();
//相同类型的对象调用相同的方法表现出不同的行为
sheep.Voice();
Console.ReadKey();
}
}
//动物父类
public class Animal
{
//几乎所有的动物都具有发出声音的能力
//但是对于动物的子类来说,每个子类发出的声音都是不一样的
public virtual void Voice()
{
Console.WriteLine("动物开始发出声音了");
}
}
//马(子类),子类应该重写父类中的方法,以实现自己特有的行为
public class Horse : Animal
{
//通过override关键字来重写父类中方法
public override void Voice()
{
//调用父类中的方法
base.Voice();
Console.WriteLine("马发出嘶嘶。。。。嘶嘶。。。的声音");
}
}
//羊(子类)
public class Sheep : Animal
{
public override void Voice()
{
base.Voice();
Console.WriteLine("羊发出咩。。。咩。。。。的声音");
}
}
}
结果:
阻止派生类重写虚成员—-
怎么停止对马类中的voice方法继续重写?使用sealed关键字,停止继续重新父类中方法
public class Horse : Animal
{
//通过override关键字来重写父类中方法
public sealed override void Voice()
{
//调用父类中的方法
base.Voice();
Console.WriteLine("马发出嘶嘶。。。。嘶嘶。。。的声音");
}
}
此时如果再有类继承这个“马”类,就不能继承该vocice方法了