De la classe de base en C #, obtenez le type dérivé?

Disons que nous avons ces deux classes:

public class Derived : Base { public Derived(ssortingng s) : base(s) { } } public class Base { protected Base(ssortingng s) { } } 

Comment puis-je savoir dans le constructeur de Base que Derived est l’invocateur? C’est ce que j’ai imaginé:

 public class Derived : Base { public Derived(ssortingng s) : base(typeof(Derived), s) { } } public class Base { protected Base(Type type, ssortingng s) { } } 

Existe-t-il une autre méthode qui ne nécessite pas de passer typeof(Derived) , par exemple, une manière d’utiliser la reflection dans le constructeur de Base ?

 using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(ssortingng[] args) { Base b = new Base(); Derived1 d1 = new Derived1(); Derived2 d2 = new Derived2(); Base d3 = new Derived1(); Base d4 = new Derived2(); Console.ReadKey(true); } } class Base { public Base() { Console.WriteLine("Base Constructor. Calling type: {0}", this.GetType().Name); } } class Derived1 : Base { } class Derived2 : Base { } } 

Ce programme produit ce qui suit:

 Base Constructor: Calling type: Base Base Constructor: Calling type: Derived1 Base Constructor: Calling type: Derived2 Base Constructor: Calling type: Derived1 Base Constructor: Calling type: Derived2 

GetType() vous donnerait ce que vous recherchez.