Можно ли вызвать перегруженный конструктор того же класса В C#?


Я знаю, что могу сделать это с помощью ': this ()', но если я сделаю это, перегруженный конструктор будет исключен первым, и мне нужно, чтобы он был выполнен после конструктора, который его вызовет . . . . Сложно объяснить позвольте мне поставить некоторый код:

Class foo{
    public foo(){
       Console.WriteLine("A");
    }
    public foo(string x) : this(){
       Console.WriteLine(x);
    }
}

///....

Class main{
    public static void main( string [] args ){
       foo f = new foo("the letter is: ");
    }
}

В этом примере программа покажет

A 
the letter is:

Но чего я хочу, так это

the letter is: 
A

Есть ли "элегантный способ" сделать это? Я бы предпочел не извлекать действия конструктора в separated метод и вызвать их оттуда.

2 3

2 ответа:

Да, вы можете сделать это довольно легко (к сожалению):

class foo {
    public foo( ) {
        Console.WriteLine( "A" );
    }
    public foo( string x ) {
        Console.WriteLine( x );

        var c = this.GetType( ).GetConstructor( new Type[ ] { } );
        c.Invoke( new object[ ] { } );
    }
}

class Program {
    static void Main( string[ ] args ) {
        new foo( "the letter is: " );
    }
}

Извлеките действия конструктора в виртуальные методы и вызовите их оттуда.

Это дает вам полный контроль над порядком, в котором функциональность производного класса выполняется относительно базового класса.