您的位置:首页 > 编程语言 > C#

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 关键字修饰的方法 如果找到了 那么久执行子类的这个方法 否则还是执行父类的这个方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: