首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

基类的构造函数中调用了虚函数。解决方案

2012-03-09 
基类的构造函数中调用了虚函数。//如下代码:abstract class baseclass{baseclass(){callA()}virtual void

基类的构造函数中调用了虚函数。
//如下代码:
abstract class baseclass{
  baseclass(){
  callA();
  }
  virtual void callA();
}

class newclass:basseclass{
  newclass();
  override void callA(){};
}

baseclass中callA()因为会出现初始化顺序错误会出现警告,问题是这种情况下如何才是正确的使用多态的方法?



[解决办法]

C# code
abstract class baseclass    {       protected baseclass()        {            callA();        }      public  abstract  void callA();    }    class newclass : baseclass    {        public newclass() { }        public override void callA()        {            Console.WriteLine("new class implement!");        }    }    class Program    {        static void Main(string[] args)        {            baseclass mybase = new newclass();        }    }
[解决办法]
如果是自己设计的类,则改掉这个做法,不要在构造函数中调用虚方法,如果一定要在构造以后调用这个虚方法,那么最好是在使用New建立对象后主动的调用虚方法,比如:
baseclass bc=new baseclass();
bc.callA();

这样就避免了任何初始化的问题,并且是合理的。
不需要也不可以把虚方法在构造函数中调用。
[解决办法]
构造函数中调用抽象/虚拟方法也是可以的,也没有发现编译警告,用这种方法实现差异化的构造也是行得通的
[解决办法]
@soaringbird
编译确实没有警告,代码分析会有警告
@lz
考虑用Builder模式

热点排行