C# base关键字的用法
如果子类重写了父类的方法,并且想在子类的方法中调用父类原有的方法,该怎么办?为了满足这种需求,C# 提供了 base 关键字。
base 关键字的使用方法与 this 关键字类似。this 关键字代表本类对象,base 关键字代表父类对象,使用方法如下。
创建一个 Computer 类,用来作为父类;再创建一个 Pad 类,继承自 Computer 类。重写父类方法,并使用 base 关键字调用父类方法原有的逻辑,代码如下。
程序运行结果为:
另外,使用 base 关键字还可以指定创建子类对象时应调用的父类构造函数。例如,修改上面实例,在父类 Computer 中定义一个构造函数,用来为定义的属性赋初始值,代码如下。
在子类 Pad 中定义构造函数时,可使用 base 关键字调用父类 Computer 的构造函数,代码如下。
base 关键字的使用方法与 this 关键字类似。this 关键字代表本类对象,base 关键字代表父类对象,使用方法如下。
base.property; //调用父类的属性 base.method();//调用父类的方法说明:如果要在子类中使用 base 关键字调用父类的属性或者方法,则父类的属性和方法的可访问性必须定义为 public 或者 protected,而不能是 private。
创建一个 Computer 类,用来作为父类;再创建一个 Pad 类,继承自 Computer 类。重写父类方法,并使用 base 关键字调用父类方法原有的逻辑,代码如下。
class Computer//父类:计算机 { public string sayHello() { return "欢迎使用"; } } class Pad : Computer//子类:平板电脑 { public new string sayHello()//子类重写父类方法 { return base.sayHello() + "平板电脑";//调用父类方法,在结果后添加字符串 } } class Program { static void Main(string[] args) { Computer pc = new Computer();//计算机类 Console.WriteLine("父类sayHello方法结果:" + pc.sayHello()); Pad ipad = new Pad();//平板电脑类 Console.WriteLine("\n子类sayHello方法结果:" + ipad.sayHello()); Console.ReadLine(); } }上面代码中,在子类中定义 sayHello 方法时,用了 new 关键字。这是因为子类中的 sayHello 方法与父类中的 sayHello 方法同名,而且返回值、参数完全相同,这时在该类中调用 sayHello 方法会产生歧义,所以加了 new 关键字来隐藏父类的 sayHello 方法。
程序运行结果为:
父类sayHello方法结果:欢迎使用
子类sayHello方法结果:欢迎使用平板电脑
另外,使用 base 关键字还可以指定创建子类对象时应调用的父类构造函数。例如,修改上面实例,在父类 Computer 中定义一个构造函数,用来为定义的属性赋初始值,代码如下。
public Computer(string name, string num) { Name = name; Num = num; }
在子类 Pad 中定义构造函数时,可使用 base 关键字调用父类 Computer 的构造函数,代码如下。
public Pad(string model, string name, string num) : base(name, num) { Model = model; }注意,访问父类成员只能在构造函数、实例方法或实例属性中进行,因此在静态方法中使用 base 关键字是错误的。