【问题标题】:Is it really possible to call Child class constructor first instead of parent class constructor in case of inheritance in C#在C#中继承的情况下,是否真的可以先调用子类构造函数而不是父类构造函数
【发布时间】:2014-05-08 18:18:53
【问题描述】:

任何人都可以帮我解释一下,在 C# 中继承的情况下,真的可以先调用子类构造函数而不是父类构造函数吗?

【问题讨论】:

    标签: c# oop inheritance constructor


    【解决方案1】:

    不,派生构造函数中的代码不能在基类的构造函数之前执行。

    这通常只会在您从构造函数something you shouldn't do 调用虚拟方法时出现问题。

    【讨论】:

    • 我有时想知道如果未来的框架版本的Object 包含一个protected virtual NotifyOfConstruction(Exception failureIfAny) 方法,该方法将在派生最多的构造函数将控制权返回给客户端之前立即调用该方法的成本和收益是多少代码?构造一个对象通常需要在将其暴露给客户端代码之前将其暴露给其他对象,这反过来又增加了调用其虚拟方法的可能性。让基础对象让派生对象有机会在这样的构造之前构造自己。
    • 我认为通过虚拟方法也无法实现,正如大多数人所说的那样,您的意思是在真实场景中是不可能的,对吧?
    【解决方案2】:

    .NET 框架试图保证在没有调用所有基类构造函数的情况下,不能将对象暴露给外部世界。因此,对于子类构造函数在调用父构造函数之前允许执行的操作存在严格限制。用 C# 编写的子类构造函数将在调用父构造函数之前评估字段初始化表达式,因此从技术上讲,子类构造函数在父构造函数之前运行。不幸的是,目前,字段初始化表达式不允许做太多事情。

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      相关资源
      最近更新 更多