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