Добрый! Подскажите пжалуста есть ли в c# возможность инициализировать члены класса ПЕРЕД выполнением конструктора при помощи списка инициализации. Например при помощи вот такого синтаксиса
свойства инициализируются ПОСЛЕ выполнения тела конструктора, а хотелось бы как в ++ перед конструктором. Может есть другие варианты? На SO есть такой вопрос, но там ответили, что нет мол, так не получится.( Что подскажете?? Спасибо.
public class A1
{
public A1(string somedata){//некоторые действия}public string Prop1{get;set;}
public string Prop2{get;set;}
}
// гдето вызов
A1 a = new A1(stringvar){ Prop1 = "Vasya", Prop2 = "Petya"};
Re: Инициализация членов класса перед выполнением конструктора
Здравствуйте, Svoyak, Вы писали:
S>Добрый! Подскажите пжалуста есть ли в c# возможность инициализировать члены класса ПЕРЕД выполнением конструктора при помощи списка инициализации. Например при помощи вот такого синтаксиса S>свойства инициализируются ПОСЛЕ выполнения тела конструктора, а хотелось бы как в ++ перед конструктором. Может есть другие варианты? На SO есть такой вопрос, но там ответили, что нет мол, так не получится.( Что подскажете?? Спасибо. S>
S> public class A1
S> {
S> public A1(string somedata){//некоторые действия}
S> public string Prop1{get;set;}
S> public string Prop2{get;set;}
S> }
S>// гдето вызов
S> A1 a = new A1(stringvar){ Prop1 = "Vasya", Prop2 = "Petya"};
S>
А зачем это надо?
Re: Инициализация членов класса перед выполнением конструктора
Здравствуйте, Svoyak, Вы писали:
S> На SO есть такой вопрос, но там ответили, что нет мол, так не получится.( Что подскажете?? Спасибо.
правду там сказали.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: Инициализация членов класса перед выполнением конструктора
Здравствуйте, Svoyak, Вы писали:
S>Добрый! Подскажите пжалуста есть ли в c# возможность инициализировать члены класса ПЕРЕД выполнением конструктора при помощи списка инициализации. Например при помощи вот такого синтаксиса S>свойства инициализируются ПОСЛЕ выполнения тела конструктора, а хотелось бы как в ++ перед конструктором. Может есть другие варианты? На SO есть такой вопрос, но там ответили, что нет мол, так не получится.( Что подскажете?? Спасибо. S>
S> public class A1
S> {
S> public A1(string somedata){//некоторые действия}
S> public string Prop1{get;set;}
S> public string Prop2{get;set;}
S> }
S>// гдето вызов
S> A1 a = new A1(stringvar){ Prop1 = "Vasya", Prop2 = "Petya"};
S>
Экземплярные нет, может быть статические подойдут?
Re: Инициализация членов класса перед выполнением конструктора
Здравствуйте, Svoyak, Вы писали:
S>Добрый! Подскажите пжалуста есть ли в c# возможность инициализировать члены класса ПЕРЕД выполнением конструктора при помощи списка инициализации. Например при помощи вот такого синтаксиса S>свойства инициализируются ПОСЛЕ выполнения тела конструктора, а хотелось бы как в ++ перед конструктором. Может есть другие варианты? На SO есть такой вопрос, но там ответили, что нет мол, так не получится.( Что подскажете?? Спасибо.
В отличие от С++, где вызов операции "new Type()" можно представить как "new" + "obj.Type()", в C# конструктор (точнее среда .NET) создает объект сам. Поэтому выполнить какие-либо действия до вызова конструктора не представляется возможным, т.к. не существует самого объекта.
А почему не рассматривается вариант с параметризованными конструкторами?
Re: Инициализация членов класса перед выполнением конструктора
Здравствуйте, Svoyak, Вы писали:
S>свойства инициализируются ПОСЛЕ выполнения тела конструктора, а хотелось бы как в ++ перед конструктором. Может есть другие варианты? На SO есть такой вопрос, но там ответили, что нет мол, так не получится.( Что подскажете?? Спасибо.
Параметризованный конструктор вам в помощь.
Вынесите вашу магию из конструктора. И "проблема" исчезнет и коллеги не побъют за лапшу в .ctor.
Re: Инициализация членов класса перед выполнением конструктора
public class A1
{
public A1(string somedata){//некоторые действия}public A1(string somedata, string prop1, string prop2){ Prop1 = prop1; Prop2 = prop2; //некоторые действия}public string Prop1{get;set;}
public string Prop2{get;set;}
}
// гдето вызов
// A1 a = new A1(stringvar){ Prop1 = "Vasya", Prop2 = "Petya"};
A1 a = new A1("Vasya", "Petya", stringvar);
"Некоторые действия" оформить в виде приватного метода, который вызывается из всех конструкторов. Ну или можно попробовать с одним конструктором, если использовать параметры с значениями по умолчанию, как-то так: