C# Language Initialisation du constructeur et de la propriété


Exemple

L'affectation de la valeur de la propriété doit-elle être exécutée avant ou après le constructeur de la classe?

public class TestClass 
{
    public int TestProperty { get; set; } = 2;
    
    public TestClass() 
    {
        if (TestProperty == 1) 
        {
            Console.WriteLine("Shall this be executed?");
        }

        if (TestProperty == 2) 
        {
            Console.WriteLine("Or shall this be executed");
        }
    }
}

var testInstance = new TestClass() { TestProperty = 1 };

Dans l'exemple ci-dessus, la valeur TestProperty doit- TestProperty être 1 dans le constructeur de la classe ou après le constructeur de classe?


Affectez des valeurs de propriété dans la création d'instance comme ceci:

var testInstance = new TestClass() {TestProperty = 1};

Sera exécuté après l'exécution du constructeur. Toutefois, l'initialisation de la propriété dans la propriété de la classe dans C # 6.0 ressemble à ceci:

public class TestClass 
{
    public int TestProperty { get; set; } = 2;

    public TestClass() 
    {
    }
}

sera fait avant que le constructeur ne soit exécuté.


Combinant les deux concepts ci-dessus dans un seul exemple:

public class TestClass 
{
    public int TestProperty { get; set; } = 2;
    
    public TestClass() 
    {
        if (TestProperty == 1) 
        {
            Console.WriteLine("Shall this be executed?");
        }

        if (TestProperty == 2) 
        {
            Console.WriteLine("Or shall this be executed");
        }
    }
}

static void Main(string[] args) 
{
    var testInstance = new TestClass() { TestProperty = 1 };
    Console.WriteLine(testInstance.TestProperty); //resulting in 1
}

Résultat final:

"Or shall this be executed"
"1"

Explication:

La valeur TestProperty sera d'abord attribuée en tant que 2 , puis le constructeur TestClass sera exécuté, entraînant l'impression de

"Or shall this be executed"

Et puis, la TestProperty sera affectée à 1 raison de la new TestClass() { TestProperty = 1 } , ce qui rend la valeur finale de TestProperty imprimée par Console.WriteLine(testInstance.TestProperty)

"1"