上一篇:深入剖析C#继承机制5 >>
深入剖析C#继承机制3
(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( )方法。
下一篇:深入剖析C#继承机制2 >>
相关文章:
- · 用正则表达式过滤脚本的一些研究(asp.net + C#)
- · C#在状态栏中,自绘进度条,
- · VisualC#中MDI窗体初步
- · use MSAgent in C#
- · 使用C#在进度条中显示复制文件的进度
- · C#中string与byte[]的转换帮助类
- · SQL Server 调用C#。net写的Dll ,(分享我的HelloWorld测验)
- · c#中实现文件拖放打开的方法
- · C#中Base64之编码,解码方法
- · 使用.INI文件为输入界面创建“动态帮助”
- · C#自定义控件制作篇
- · 用C#下的Raw Socket编程实现网络封包监视
- · C#中的事件
- · C#中的类型转换
- · C#中的接口
- · c#中结构与类的区别
- · 数据库操作类实现(C#,SqlClient)
- · 设计模式-简单工厂模式(SimpleFactory-C#)
- · 【C#】Decimal的类型判断!
- · 用c#写的贪吃蛇游戏,简简单单
- · 天天学C#-委托
- · 天天学C#-委托
- · C#中的泛型 (From dotNet SDK 2.0 Beta1)
- · 在C#编写代码发送邮件
- · 使用VB求解华容道问题
- · C#使用CDO发送邮件
- · 读《C#入门经典》
- · 【C#】整数类型的判断!
- · c#下重写BUTTON控件
- · 怎样在C#中调用Delphi6写的DLL
- · C#向Sql Server中插入记录时单引号的处理
- · 使用 Visual C# .NET 检查 Windows 版本
- · C#:获得文件版本信息及只读文件的删除
- · C#:文件的按行读/写及文件目录对话框的使用
- · 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- · C#:ListBox的2个常用方法Add,Clear与Items的2个属性
- · 用C#实现WEB浏览器
- · C#读写注册表
