日期:2014-05-18 浏览次数:21099 次
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模式