C#重写使用关键字override
-
定义:重写就是在子类中重新编写父类方法
-
注意:
a.重写父类的方法要用到override关键字b.要重写父类的方法,前提是父类中该要被重写的方法必须声明为virtual或abstract类型。
c.virtual关键字用于将方法定义为支持多态,有virtual关键字修饰的方法称为“虚拟方法”
[访问修饰符] virtual [返回类型] 方法名(参数列表) { }
-
例题:
using System;
namespace 重写
{
class A
{
public virtual void OutPut()
{
Console.WriteLine("输出A");
}
}
class B:A
{
public override void OutPut()
{
base.OutPut();
Console.WriteLine("输出B");
}
}
class C:B
{
}
class D : A
{
public new void OutPut()
{
base.OutPut();//base关键字!!!
Console.WriteLine("输出D");
}
}
class Program
{
static void Main(string[] args)
{
A sum = new A();
A sum1 = new B();
A sum2 = new C();
A sum3 = new D();
D sum4 = new D();
sum.OutPut();
sum1.OutPut();
sum2.OutPut();
sum3.OutPut();
sum4.OutPut();
Console.ReadKey();
}
}
}
运行结果:
输出A
输出A
输出B
输出A
输出B
输出A
输出A
输出D
1. base关键字用于从子类中访问父类成员。即使父类的方法在子类中重写,仍可以使用base关键字调用。
2. 在创建子类实例时,可以使用base关键字调用父类的构造函数。使用base关键字只能访问父类的构造函数、
实例方法或实例属性,而不能访问基类的静态方法。
C#重载(overload)
重载就是在同一个类中的多个同名方法,只是这些方法的参数类表不同
using System;
namespace 重写
{
class AddClass
{
public int Add(int a,int b)
{
return a + b;
}
public int Add(int a,int b,int c)
{
return a + b + c;
}
public double Add(double a, double b)
{
return a + b;
}
public double Add(double a, double b, double c)
{
return a + b + c;
}
}
class Program
{
static void Main(string[] args)
{
AddClass s = new AddClass();
Console.WriteLine(s.Add(1, 2));
Console.WriteLine(s.Add(1, 2, 3));
Console.WriteLine(s.Add(1.2, 3.3, 4.4));
Console.WriteLine(s.Add(1.2, 3.3));
Console.ReadKey();
}
}
}
运行结果
3
6
8.9
4.5
覆写
overwrite覆写,用new实现。在子类中用 new 关键字修饰定义的与父类中同名的方法,也称为覆盖,覆盖不会改变父类方法的功能。