首页 > 开发 > 综合 > 正文

深入剖析C#继承机制3

2024-07-21 02:18:13
字体:
来源:转载
供稿:网友
三. 访问与隐藏基类成员

  (1) 访问基类成员

  通过base 关键字访问基类的成员:

   调用基类上已被其他方法重写的方法。
   指定创建派生类实例时应调用的基类构造函数。
   基类访问只能在构造函数、实例方法或实例属性访问器中进行。
   从静态方法中使用 base 关键字是错误的。

  示例:下面程序中基类 person 和派生类 employee 都有一个名为 getinfo 的方法。通过使用 base 关键字,可以从派生类中调用基类上的 getinfo 方法。


using system ;
public class person
{
protected string ssn = "111-222-333-444" ;
protected string name = "张三" ;
public virtual void getinfo() {
console.writeline("姓名: {0}", name) ;
console.writeline("编号: {0}", ssn) ;
}
}
class employee: person
{
public string id = "abc567efg23267" ;
public override void getinfo() {
// 调用基类的getinfo方法:
base.getinfo();
console.writeline("成员id: {0}", id) ;
}
}
class testclass {
public static void main() {
employee e = new employee() ;
e.getinfo() ;
}
}

  程序运行输出:

   姓名: 张三
   编号: 111-222-333-444
   成员id: abc567efg23267
   示例:派生类同基类进行通信。


using system ;
public class parent
{
string parentstring;
public parent( )
{ console.writeline("parent constructor.") ; }
public parent(string mystring) {
parentstring = mystring;
console.writeline(parentstring) ;
}
public void print( )
{ console.writeline("i'm a parent class.") ; }
}
public class child : parent
{
public child( ) : base("from derived")
{ console.writeline("child constructor.") ; }
public void print( ) {
base.print( ) ;
console.writeline("i'm a child class.") ;
}
public static void main( ) {
child child = new child( ) ;
child.print( ) ;
((parent)child).print( ) ;
}
}

  程序运行输出:

from derived
child constructor.
i'm a parent class.
i'm a child class.
i'm a parent class.

  说明:

  1.派生类在初始化的过程中可以同基类进行通信。

  上面代码演示了在子类的构造函数定义中是如何实现同基类通信的。分号":"和关键字base用来调用带有相应参数的基类的构造函数。输出结果中,第一行表明:基类的构造函数最先被调用,其实在参数是字符串"from derived"。

  2.有时,对于基类已有定义的方法,打算重新定义自己的实现。

  child类可以自己重新定义print( )方法的实现。child的print( )方法覆盖了parent中的 print 方法。结果是:除非经过特别指明,parent类中的print方法不会被调用。

  3.在child类的 print( ) 方法中,我们特别指明:调用的是parent类中的 print( ) 方法。

  方法名前面为"base",一旦使用"base"关键字之后,你就可以访问基类的具有公有或者保护权限的成员。 child类中的print( )方法的执行结果出现上面的第三行和第四行。

  4.访问基类成员的另外一种方法是:通过显式类型转换。

  在child类的main( )方法中的最后一条语句就是这么做的。记住:派生类是其基类的特例。这个事实告诉我们:可以在派生类中进行数据类型的转换,使其成为基类的一个实例。上面代码的最后一行实际上执行了parent类中的 print( )方法。



  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表