代码之家  ›  专栏  ›  技术社区  ›  willeM_ Van Onsem

通过继承构造函数来颠倒构造函数调用的顺序

  •  2
  • willeM_ Van Onsem  · 技术社区  · 17 年前

    public class A {
    
        protected A () {
            //do something
        }
    
    }
    
    public class B : A {
    
        public B () : base() {
            //do something else
        }
    
    }
    

    他们是一种颠倒顺序的方法,还是一种变通方法?其中一种可能的解决方案是,我们在基类中创建一个额外的受保护方法,如doConstructor(),并在第一个任务后在派生构造函数中调用它。对于只读字段来说,这是不可能的,因为编译器不会接受它。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Noldorin    17 年前

    没有直接的方法来实现这一点。过去,我也遇到过这种情况,并使用了 Initialize 解决它的方法。

    public class A
    {
        protected A()
        {
            // Do pre-initialization here still.
    
            Initialize();
        }
    
        protected virtual Initialize()
        {
            // Do all post-derived-class initialization here.
        }
    }
    
    public class B : A
    {
        public B()
            : base()
        {
        }
    
        protected override Initialize()
        {
            // Do initialization between pre- and post- initialization here.
    
            base.Initialize();
        }
    }
    

    只要您遵循这里的预初始化、后初始化和正常初始化的指导方针,它就可以是相当安全的,并且符合良好实践。

    推荐文章