问题描述
需要usingSystem.Collections;publicclassFibonacci:CollectionBase{publicFibonacci(){}publicvirtualintAdd(intvalue){returnbase.InnerList.Add(value);}publicobjectPeek(intindex){returnbase.List[index];}publicvirtualvoidReMove(){base.InnerList.RemoveAt((int)base.InnerList.Count-1);}staticpublicFibonaccisd=newFibonacci();publicstaticvoidPrint(Fibonaccilist){IEnumeratorienu=sd.GetEnumerator();inti=0;while(ienu.MoveNext()){Console.Write(ienu.Current+"");i=i+1;if(i%10==0)Console.WriteLine();}}staticvoidMain(string[]args){sd.Add(1);sd.Add(1);for(inti=2;i<20;i++){sd.Add((int)sd.Peek(i-1)+(int)sd.Peek(i-2));}Print(sd);Console.ReadLine();}}这个自定义集合怎么都这么写:publicvirtualintAdd(intvalue)(声明方法为vitual)来重写Add方法呢?写错了吧。但又能运行出结果呢?菜鸟希望大家帮助,^_^
解决方案
解决方案二:
去掉这个关键字也不会对本程序产生影响,它主要是为了以后继承这个类而使用的参考:http://blog.csdn.net/zhoufoxcn/archive/2007/01/31/1498685.aspxhttp://www.cnblogs.com/Bear-Study-Hard/archive/2005/12/22/302420.html
解决方案三:
不想被重写应该使用sealed关键词来锁定。virtual关键词是声明当该方法被重写时不是new。
解决方案四:
写错?难道楼主以为是抽象?虚拟只是为了继承的方便。
解决方案五:
publicvirtualintAdd(intvalue)用virtual来声明这个方法是可以被字类重写的。如果没有virtual子类将不能重写这个方法。没有子类,它也能独立运行的,方法和子类无关的。
解决方案六:
知道了,谢谢楼上的这些朋友。