深入剖析C#继承机制--访问与隐藏基类成员
上一篇 / 下一篇 2007-08-10 17:11:25 / 个人分类:C#
JA6G _LHB,G(|8H0(1)访问基类成员51Testing软件测试网#J2{7EyDD%] {
通过base 关键字访问基类的成员:51Testing软件测试网l0V.J6C^*vM
调用基类上已被其他方法重写的方法。51Testing软件测试网^0DS(vll
指定创建派生类实例时应调用的基类构造函数。51Testing软件测试网PA:p[a,z)W,w3l/T6\+\
基类访问只能在构造函数、实例方法或实例属性访问器中进行。51Testing软件测试网K cb[b#Q|
从静态方法中使用 base 关键字是错误的。51Testing软件测试网3[,{-t0x$E*Y)Fx
51Testing软件测试网.E:OeK@|A+i
示例:下面程序中基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法。通过使用 base 关键字,可以从派生类中调用基类上的 Getinfo 方法。
Be_+^8r%pEC0using System ;
%Tf `8]`rvV'RB3R0public class Person51Testing软件测试网-X&A0p9c
Qp0v)^cA
{51Testing软件测试网N"Q+?w2x
protected string ssn = "111-222-333-444" ;51Testing软件测试网 MK`R0c SC
protected string name = "张三" ;51Testing软件测试网;i;yL.VVI4}l|-u
public virtual void GetInfo() {51Testing软件测试网s*i,e h:@| CN
Console.WriteLine("姓名: {0}", name) ;51Testing软件测试网R7YZhMx!Hb4C6N
Console.WriteLine("编号: {0}", ssn) ;51Testing软件测试网FJat+GGFf jt1R
}
[
C:X/DMv|V8|0}51Testing软件测试网B Znp*Tln'm
class Employee: Person51Testing软件测试网p kE(|D%^/c,l
{
Wy3KP4K.mpiMjD0public string id = "ABC567EFG23267" ;51Testing软件测试网rEf4e?C"y9`l
public override void GetInfo() {51Testing软件测试网c0C;e
]3T3` O ]x[
// 调用基类的GetInfo方法:51Testing软件测试网| q3z1c6p)}0]m
base.GetInfo();
Zt3rp:X0Console.WriteLine("成员ID: {0}", id) ;51Testing软件测试网 b be NN
}51Testing软件测试网rTw&VF/zn
}
[K9e,NM(J0class TestClass {51Testing软件测试网IxC%L;_ X
public static void Main() {
tA+`-} Q b2bu0Employee E = new Employee() ;
2eu*Qm,Cs$Hu0E.GetInfo() ;51Testing软件测试网%|(C
tfR\~8x
}51Testing软件测试网bq(vA5weZ M)T
}51Testing软件测试网mrE7GD
7r#?d#ZM^x)S0 程序运行输出:51Testing软件测试网 qF#di EIv
X^-N$D9Cs!zlH0
bt$s
c1J$wbK4U0 姓名: 张三51Testing软件测试网o-L&_.B@*f1J'x
编号: 111-222-333-444
:R}*K.XS9e0 成员ID: ABC567EFG2326751Testing软件测试网+Q;ax"]B'{K-c
示例:派生类同基类进行通信。51Testing软件测试网_oBY
Y@-jFG!b
51Testing软件测试网 u.]&a[&BJ/WMs"p5H(@
9Z}0ZE-h$M(e Ha0using System ;51Testing软件测试网6O+kp3[0z"^g~P(X!o
public class Parent
#Le z{0gcve
}z0{
.nR%U3yP
o0string parentString;51Testing软件测试网P8~1K0ct @5Ya
public Parent( )
{4I6X]Sr0{ Console.WriteLine("Parent Constructor.") ; }
E0Lgb)n0public Parent(string myString) {51Testing软件测试网!f/s8kSD@U
parentString = myString;51Testing软件测试网$Pw w8O[-T6[
Console.WriteLine(parentString) ;51Testing软件测试网2su!g5un'p f8?R
}51Testing软件测试网 C dWE\![T~({
public void print( )51Testing软件测试网
ryw?
M
{ Console.WriteLine("I''m a Parent Class.") ; }
q Ogl?ZeC2t Qi0}
_G
E9Qc@0public class Child : Parent
0gs*~mp4G]!Zh0{
_n^V3g0public Child( ) : base("From Derived")
u1A&qa\7Y _~l0{ Console.WriteLine("Child Constructor.") ; }51Testing软件测试网9x~2K-N9k q`
public void print( ) {
9Bz"\M;?s0base.print( ) ;51Testing软件测试网_/`!maaI7D
Console.WriteLine("I''m a Child Class.") ;51Testing软件测试网2Mm:qBw!s
}51Testing软件测试网)^WF([gz4Y!OcX5s
public static void Main( ) {51Testing软件测试网4PD@:R_&O5h
Child child = new Child( ) ;
l`6cFwq5G2hc/B8F0child.print( ) ;