Можно ли вызвать перегруженный конструктор из другого конструктора того же класса в С#?
Можно ли вызвать перегруженный конструктор из другого конструктора того же класса в С#?
Ответ 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().
Если вы хотите что-то сделать перед вызовом базового конструктора, кажется, что построение базы - это класс, зависящий от некоторых внешних вещей. Если это так, вы должны использовать аргументы базового конструктора, а не задавать свойства базового класса или что-то вроде этого