| 发表于:2007-01-25 09:10:46 楼主 |
using system; /// <summary> /// 基类 /// </summary> public class resultstyleofitemsbase { /// <summary> /// 构建表格 /// </summary> public virtual void buildtable() { createheader( ); //掉用本类中的 createheader createitems( ); //掉用本类中的 createitems } /// <summary> /// 构建表头 /// </summary> protected virtual void createheader( ) { console.writeline( "基类.createheader() "); } /// <summary> /// 构建行 /// </summary> protected virtual void createitems( ) { console.writeline( "基类.createitems() "); } } /// <summary> /// 派生类 /// </summary> public class resultstyleofitemsscoring : resultstyleofitemsbase { /// <summary> /// 构建表格 /// </summary> public override void buildtable() { base.buildtable(); createheader( ); //掉用本类中的 createheader createitems( ); //掉用本类中的 createitems } /// <summary> /// 创建表头 /// </summary> protected override void createheader() { console.writeline( "派生类.createheader() "); } /// <summary> ///构建行 /// </summary> /// <param name= "list "> </param> protected override void createitems( ) { console.writeline( "派生类.createitems() "); } } /// <summary> ///调用类 /// </summary> public class app { public static void main() { resultstyleofitemsbase items= new resultstyleofitemsscoring(); items.buildtable(); } } /* 编译:c:\windows\microsoft.net\framework\v2.0.50727> csc /target:exe /out: "c:\my documents\重载陷阱.exe " "c:\my documents\重载陷阱.cs " 在main方法中创建了的resultstyleofitemsscoring的实例,在此实例的buildtable()重载了基类的相同方法,在基类的方法buildtable()中先后 调用了 createheader( ); createitems( ); 设计的本意是 用基类的buildtable()方法调用基类自身的createheader( )、createitems( )方法, 派生类的buildtable()调用派生类的createheader( )、createitems( )方法, 没有想到因为在派生类中也重载基类的createheader( )、createitems( )方法,在基类的buildtable()方法中调用 createheader()、createitems()两个方法时是调用派生类中重载的createheader( )、createitems( )。 在本例中输出为: 派生类.createheader() 派生类.createitems() 派生类.createheader() 派生类.createitems() 基类中的createheader( )、createitems( )方法根本没有执行的可能。 最后只有更改设计createheader( )、createitems( )两个方法改为私有!*/ |
|
|
|
|