首页 > 编程笔记 > C#笔记 阅读:8

C# base关键字的用法(附带实例)

如果子类重写了父类的方法,就无法调用到父类的方法了吗,如果想在子类的方法中实现父类原有的方法怎么办?为了解决这个需求,C# 中提供了 base 关键字。

base 关键字的使用方法与 this 关键字类似。this 关键字代表本类对象,base 关键字代表父类对象,使用方法如下:
base.property;    //调用父类的属性
base.method();    //调用父类的方法

如果要在子类中使用 base 关键字调用父类的属性或者方法,父类的属性和方法必须定义为 public 或者 protected 类型。

【实例】创建一个 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(pc.sayHello());
        Pad ipad = new Pad(); //平板电脑类
        Console.WriteLine(ipad.sayHello());
        Console.ReadLine();
    }
}
在第 11 行代码中,在子类中定义 sayHello() 方法时,用了一个 new 关键字,这是因为子类中的 sayHello() 方法与父类中的 sayHello() 方法同名,而且返回值、参数完全相同,这时,在该类中调用 sayHello() 时就会产生歧义,因此加了 new 关键字来隐藏父类方法。

程序运行结果为:

欢迎使用
欢迎使用平板电脑


另外,使用 base 关键字还可以指定创建派生类实例时应调用的基类构造函数。例如,在基类 Goods 中定义一个构造函数,用来为定义的属性赋初始值,代码如下:
public Goods(string tradecode, string fullname)
{
    TradeCode = tradecode;
    FullName = fullname;
}

在派生类 JHInfo 中定义构造函数时,即可使用 base 关键字调用基类的构造函数,代码如下:
public JHInfo(string jhid, string tradecode, string fullname) : base(tradecode, fullname)
{
    JHID = jhid;
}
注意,访问父类成员只能在构造函数、实例方法或实例属性中进行。因此,在静态方法中使用 base 关键字是错误的。

相关文章