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

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

Ответ 1

Нет. Вы не можете этого сделать, единственное место, которое вы можете вызвать конструктор из другого конструктора в С#, сразу после ":" после конструктора. например

class foo
{
    public foo(){}
    public foo(string s ) { }
    public foo (string s1, string s2) : this(s1) {....}

}

Ответ 2

Если вы имеете в виду, если вы можете сделать ctor chaining в С#, то да. Вопрос уже задан.

Однако, как видно из комментариев, кажется, что вы действительно собираетесь задавать "Можно ли вызвать перегруженный конструктор из внутри другого конструктора с предварительной/последующей обработкой?"
Хотя С# не имеет синтаксиса для этого, вы можете сделать это с помощью общей функции инициализации (например, вы бы сделали на С++, который не поддерживает цепочку ctor)

class A
{
  //ctor chaining
  public A():this(0)
  {  Console.WriteLine("default ctor"); }

  public A(int i)
  {  Init(i); }

  // what you want
  public A(string s)
  {  
    Console.WriteLine("string ctor overload" );
     Console.WriteLine("pre-processing" );
     Init(Int32.Parse(s));
     Console.WriteLine("post-processing" );
  }

   private void Init(int i)
   {
     Console.WriteLine("int ctor {0}", i);
   }
}

Ответ 3

EDIT: Согласно комментариям к исходному сообщению, это вопрос С#.

Короткий ответ: да, используя ключевое слово this.

Длинный ответ: да, используя ключевое слово this, и вот пример.

class MyClass
{
   private object someData;

   public MyClass(object data)
   {
      this.someData = data;
   }

   public MyClass() : this(new object())
   {
      // Calls the previous constructor with a new object, 
      // setting someData to that object
   }
}

Ответ 4

В С# невозможно вызвать другой конструктор из тела метода. Вы можете вызвать базовый конструктор следующим образом: foo (args): base(), как указано самим. Вы также можете вызвать другой конструктор в том же классе: foo (args): this().

Если вы хотите что-то сделать перед вызовом базового конструктора, кажется, что построение базы - это класс, зависящий от некоторых внешних вещей. Если это так, вы должны использовать аргументы базового конструктора, а не задавать свойства базового класса или что-то вроде этого