Разрешение неявного конструктора производного класса вызывает конструктор базового класса - PullRequest
1 голос
/ 04 марта 2020
public abstract class A {
  public A() {
    // do stuff
  }
}

public class B : A {
  // let implicit constructor of class B also call base()
}

Я хочу, чтобы неявный конструктор моего производного класса вызывал base (). Как выполнить sh в c# без создания явного конструктора для производного класса B?

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

Это уже делает; давайте запустим ваш код через sharplab.io и посмотрим на IL для B:

.class public auto ansi beforefieldinit B
    extends A
{
    // Methods
    .method public hidebysig specialname rtspecialname 
        instance void .ctor () cil managed 
    {
        // Method begins at RVA 0x2058
        // Code size 7 (0x7)
        .maxstack 8

        IL_0000: ldarg.0
        IL_0001: call instance void A::.ctor()
        IL_0006: ret
    } // end of method B::.ctor

} // end of class B

, мы можем видеть здесь, что B имеет конструктор publi c без параметров, который вызывает конструктор A без параметров (on IL_0001). По сути,

public class B : A {
}

является сокращением для

public class B : A {
  public B() : base() {}
}
2 голосов
/ 04 марта 2020

Он всегда неявно вызывает конструктор базового класса. Вы можете проверить это:

public abstract class A {
  public A() {
      Console.WriteLine("Class A");
  }
}

public class B : A {

}
...