【发布时间】:2014-05-08 18:18:53
【问题描述】:
任何人都可以帮我解释一下,在 C# 中继承的情况下,真的可以先调用子类构造函数而不是父类构造函数吗?
【问题讨论】:
标签: c# oop inheritance constructor
任何人都可以帮我解释一下,在 C# 中继承的情况下,真的可以先调用子类构造函数而不是父类构造函数吗?
【问题讨论】:
标签: c# oop inheritance constructor
不,派生构造函数中的代码不能在基类的构造函数之前执行。
这通常只会在您从构造函数something you shouldn't do 调用虚拟方法时出现问题。
【讨论】:
Object 包含一个protected virtual NotifyOfConstruction(Exception failureIfAny) 方法,该方法将在派生最多的构造函数将控制权返回给客户端之前立即调用该方法的成本和收益是多少代码?构造一个对象通常需要在将其暴露给客户端代码之前将其暴露给其他对象,这反过来又增加了调用其虚拟方法的可能性。让基础对象让派生对象有机会在这样的构造之前构造自己。
.NET 框架试图保证在没有调用所有基类构造函数的情况下,不能将对象暴露给外部世界。因此,对于子类构造函数在调用父构造函数之前允许执行的操作存在严格限制。用 C# 编写的子类构造函数将在调用父构造函数之前评估字段初始化表达式,因此从技术上讲,子类构造函数在父构造函数之前运行。不幸的是,目前,字段初始化表达式不允许做太多事情。
【讨论】: