C#基础-->方法的重载(overload)与重写(override)
2016-06-11 12:22
916 查看
1.0重载和重写的概念
重载(overload):在同1个类下 允许有方法名称相同的方法.但是要求这些方法的参数的个数或者类型不同.与返回值无关.只与方法的参数的个数和类型有关. overload是面向过程的概念重写(override): 是派生类(子类)对基类(父类)中被关键字virtual标识的方法重新实现 Override是面向对象的概念
2.0重载的实现过程
namespace soaeon { public class Person { public string Name { get; set; } public bool Gender { get; set; } public int Age { get; set; } public Person(string name, bool gender, int age) { this.Name = name; this.Gender = gender; this.Age = age; } public string GetMessage(int age, string name) { return string.Format("年龄是{0},姓名是[1}",age,name); } public string GetMessage(bool gender) { return gender == true ? "男" : "女"; } } }
3.0重写的实现过程
快捷写法 在派生类中 直接override 然后空格键 会提示你哪些是可以重写的方法namespace soaeon { /// <summary> /// 父类 /// </summary> public class Person { public string Name { get; set; } public bool Gender { get; set; } public int Age { get; set; } public Person(string name, bool gender, int age) { this.Name = name; this.Gender = gender; this.Age = age; } /// <summary> /// 被virtual关键字标识 提示派生类可以重新实现该方法 /// </summary> /// <param name="age"></param> /// <param name="name"></param> /// <returns></returns> public virtual string GetMessage(int age, string name) { return string.Format("年龄是{0},姓名是{1}",age,name); } } /// <summary> /// 子类 /// </summary> public class Student : Person { public int ClassNum { get; set; } public Student(string name, bool gender, int age, int classNum) : base(name, gender, age) { this.ClassNum = classNum; } /// <summary> /// 使用overrider标识 重新实现了父类的此方法 /// </summary> /// <param name="age"></param> /// <param name="name"></param> /// <returns></returns> public override string GetMessage(int age, string name) { return string.Format("hello,我的姓名是{0},年龄是{1}", name, age); } } }
4.0被重写的方法是如何被调用的呢
namespace soaeon { class Program { static void Main(string[] args) { Student s = new Student("soaeon", false, 18, 1); Console.WriteLine(s.GetMessage(s.Age, s.Name)); Console.ReadKey(); } } }
执行顺序:
调用GetMessage方法的时候 会先去会优先去父类中查找该同名方法
发现被关键字virtual标识
然后回去子类中 找到同名切被override 关键字修饰的方法 如果找到了 那么久执行子类的这个方法 否则还是执行父类的这个方法
相关文章推荐