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.