base关键字,用于从派生类中访问基类的成员。换言之,是用来“访问基类的”
一 调用基类上已被其他方法重写的方法。
二 指定创建派生类实例时应调用的基类构造函数。
base使用通用规则:
①尽量少用或者不用base和this。除了避开子类的名称冲突和在一个构造函数中调用其他的构造函数之外,base和this的使用容易引起不必要的结果。
②在静态成员中使用base和this都是不允许的。原因是,base和this访问的都是类的实例,也就是对象,而静态成员只能由类来访问,不能由对象来访问。 this是对实例的引用,而静态成员不属于实例而是属于类的,所以是不允许的。
③base是为了实现多态而设计的。
⑤简单的来说,base用于在派生类中访问重写的基类成员;而this用于访问本类的成员,当然也包括继承而来公有和保护成员。
⑥除了base,访问基类成员的另外一种方式是:显示的类型转换来实现。只是该方法不能为静态方法。
第一条,参见下面的程序:
// keywords_base.cs
// Accessing base class members
using System;
public class Person
{
}
class Employee : Person
{
}
class TestClass
{
}
对象E,其方法GetInfo访问了基类的方法base.GetInfo();从而对基类中已经被重写的方法进行了调用。
第二条,参见下面的程序:
// keywords_base2.cs
using System;
public class BaseClass
{
}
public class DerivedClass : BaseClass
{
}
在这里,对于派生类的构造函数,可以直接用“public DerivedClass(int i) : base(i)”的方式进行指定,base中只写变量的名称,如果函数体中还有代码,则是执行完基类的构造函数后,继续往下执行的部分,所以,在处理参数的时候,要分两部分处理,一部分是给基类的构造函数,一部分是给剩下的函数体的,参看下面的代码:
using System;
class BaseClass
{
}
class Derivcedclass:BaseClass
{
}
class Test
{
}
在创建类的对象时,一共有两个参数,"Wuxinhong", "Pengyao",其传到基函数 public Derivcedclass(string k,string d):base(k),而参数k传递到了所继承的基类的基函数,余下的d 则传递到了函数体中,这充分说明了:
base可以在派生类的构造函数中,起一个指定的作用。