C#⽅法重写(override)
重写(override)
重写:类的继承时发⽣,在⼦类中重新定义⽗类中的⽅法,⼦类中的⽅法和⽗类的⽅法是⼀样的,即⽅法名,参数,返回值类型都相同。
例如:基类⽅法声明为virtual(虚⽅法),派⽣类中使⽤override声明此⽅法的重写.
重写override⼀般⽤于接⼝实现和继承类的⽅法改写,要注意:
1、覆盖的⽅法的标志必须要和被覆盖的⽅法的名字和参数完全匹配,才能达到覆盖的效果;
2、覆盖的⽅法的返回值必须和被覆盖的⽅法的返回⼀致;
3、覆盖的⽅法所抛出的异常必须和被覆盖⽅法的所抛出的异常⼀致,或者是其⼦类;
4、被覆盖的⽅法不能为private,否则在其⼦类中只是新定义了⼀个⽅法,并没有对其进⾏覆盖。
⽰例:
[csharp] view plaincopyprint?
namespace ⽅法重写
{
class Program
{
static void Main(string[] args)
{
BaseClass CO = new Class Override();
CO.SetName("Override");
}
//基类
public class BaseClass
{
public virtual void SetName(string name)  //虚⽅法
{
Console.WriteLine("基类:我的名字是" + name);
}
}
//派⽣类
public class ClassOverride : BaseClass
{
public override void SetName(string name)  //重写基类中的虚⽅法
{
Console.WriteLine("Override:我的名字是" + name);
}
}
}
}
输出:writeline方法属于类
在⽅法重写中,我们介绍了虚⽅法,那么虚⽅法和抽象⽅法有什么区别呢?
1.虚⽅法(virtual)有⼀个实现部分可以被⼦类继承,从⽽使⼦类获得和基类相同的⽅法,另外也为派⽣类提供了覆盖该⽅法的选项。相反,抽象⽅法没有提供实现部分,是⼀种强制派⽣类覆盖的⽅法(否则派⽣类不能成具体类)
2.(abstract)抽象⽅法只能在抽象类中声明,(virtual)虚⽅法不是。
3.(abstract)抽象⽅法必须在派⽣类中重写⽽(virtual)虚⽅法不必。
4.(abstract)抽象⽅法不能声明⽅法实体,虚⽅法可以。
个⼈感觉,⽅法重载和⽅法重写都有点像多态,同⼀个⽅法的多种形态:执⾏“相同”的⽅法,却通过它们⾃⼰的实现代码来实现,即同⼀种⽅法,不同的对象会产⽣不同的结果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。