深入剖析C#继承机制3
2004-12-06 22:36
489 查看
三. 访问与隐藏基类成员
(1) 访问基类成员
通过base 关键字访问基类的成员:
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。
从静态方法中使用 base 关键字是错误的。
示例:下面程序中基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法。通过使用 base 关键字,可以从派生类中调用基类上的 Getinfo 方法。
程序运行输出:
姓名: 张三
编号: 111-222-333-444
成员ID: ABC567EFG23267
示例:派生类同基类进行通信。
程序运行输出:
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( )方法。
(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
- 深入剖析C#继承机制1
- 怎样通过Visual C#.net创建一个DTS任务
- 使用 Visual C# .NET 向 Microsoft Excel 2002 传输 XML 数据
- [收藏]WINFORM(C#)的键盘测试
- C#中对注册表的操作(原创)
- MP3文件分析:TAG区,C#小试牛刀!
- 在C#用GDI+实现图形图像的任意变形效果?
- C#.NET 中的类型转换[收藏]
- C#数据访问类
- 使用C#在进度条中显示复制文件的进度
- 如何通过C#调用CHM帮助文件
- 使用ADO.NET 和C# 处理BLOB 数据
- Using the Network Functions in C# (Part I - User Functions)
- C# 运算符
- .Net/C# 应用程序直接读取本地 Cookies 文件 (由于 WinXP SP2 调用 API: InternetGetCookie 无果)
- .Net/C# 应用程序直接读取本地 Cookies 文件 (由于 WinXP SP2 调用 API: InternetGetCookie 无果)
- 唉~这种SOHO的生活啊。
- C#摄像头编程
- 用C#实现木马程序(分析)