[C#] Basiskonstruktor in C # - Wer wird zuerst aufgerufen?



Answers

Basisklassenkonstruktoren werden vor abgeleiteten Klassenkonstruktoren aufgerufen, Initiatoren von abgeleiteten Klassen werden jedoch vor Basisklasseninitialisierungen aufgerufen. ZB im folgenden Code:

public class BaseClass {

    private string sentenceOne = null;  // A

    public BaseClass() {
        sentenceOne = "The quick brown fox";  // B
    }
}

public class SubClass : BaseClass {

    private string sentenceTwo = null; // C

    public SubClass() {
        sentenceTwo = "jumps over the lazy dog"; // D
    }
}

Reihenfolge der Ausführung ist: C, A, B, D.

Schau dir diese 2 msdn Artikel an:

Question

Diese Frage hat hier bereits eine Antwort:

Wer wird zuerst aufgerufen - der Basiskonstruktor oder "andere Sachen hier"?

public class MyExceptionClass : Exception
{
    public MyExceptionClass(string message, string extrainfo) : base(message)
    {
        //other stuff here
    }
}



Der Basiskonstruktor wird zuerst aufgerufen, andernfalls erhalten Sie in den Fällen, in denen Ihr "sonstiges" Membervariablen verwenden muss, die von Ihrem Basiskonstruktor initialisiert wurden, Kompilierungszeitfehler, da Ihre Klassenmitglieder noch nicht initialisiert wurden.




Tatsächlich wird der abgeleitete Klassenkonstruktor zuerst ausgeführt, aber der C # -Compiler fügt einen Aufruf des Basisklassenkonstruktors als erste Anweisung des abgeleiteten Konstruktors ein.

Also: das abgeleitete wird zuerst ausgeführt, aber es sieht so aus, als ob die Basis zuerst ausgeführt wurde.







Konstruktoraufrufe werden von Grund auf aufgerufen (gefeuert) und von oben nach unten ausgeführt. Wenn Sie also Klasse C haben, die von Klasse B erbt, die von Klasse A erbt, wird beim Erstellen einer Instanz der Klasse C der Konstruktor für C aufgerufen, der wiederum den Instruktor für B aufruft, der wiederum wiederum den Konstruktor für A. Nun wird der Konstruktor für A ausgeführt, dann wird der Konstruktor für B ausgeführt, dann wird der Konstruktor für C ausgeführt.




Ich würde sagen, Basis

EDIT siehe:

http://www.c-sharpcorner.com/UploadFile/rajeshvs/ConsNDestructorsInCS11122005010300AM/ConsNDestructorsInCS.aspx

Da heißt es:

using System;
class Base
{

public Base()
{
    Console.WriteLine("BASE 1");
}
public Base(int x)
{
    Console.WriteLine("BASE 2");
}
}

class Derived : Base
{
public Derived():base(10)
{
    Console.WriteLine("DERIVED CLASS");
}
}

class MyClient
{
public static void Main()
{
    Derived d1 = new Derived();
}
}

Dieses Programm gibt aus

BASIS2

ABGELEITETE KLASSE




Links