Конференция ".Net" » Вызов конструктора из конструктора [C#, WinXP]
 
  • Desdechado © (01.06.06 13:29) [0]
    Есть конструктор с параметрами, есть - без.
    Если вызван параметрический конструктор, но параметры переданы неверные, то хочется выполнить конструктор без параметров.
    Возможно ли и как?
    Или обойтись традиционным - отдельный метод, вызываемый из обоих конструкторов (в одном всегда, в другом - при плохих параметрах)?
  • Evgeny V © (01.06.06 14:15) [1]
    public Form1(int i):this()
  • Evgeny V © (01.06.06 14:22) [2]
    Поторопился - сорри. По контексту вопроса
    >  Если вызван параметрический конструктор, но параметры переданы
    > неверные, то хочется выполнить конструктор без параметров.
    >

    В моем примере сперва вызовется конструктор без параметров без проверок, а потом уже с параметрами. Ели вас это не устроит, то наверное лучше обойтись отдельным методом
  • Lamer@fools.ua © (02.06.06 09:03) [3]
    >Если вызван параметрический конструктор, но параметры переданы неверные, то хочется выполнить конструктор без параметров.

    Не знаю Вашей специфики, но принятая практика — кидать ArgumentException или его наследников в случае некорректных входных параметров.
  • Algol (08.06.06 16:36) [4]

    > Если вызван параметрический конструктор, но параметры переданы
    > неверные, то хочется выполнить конструктор без параметров.
    >
    > Возможно ли и как?


    Порядок вызова конструкторов (как наследуемых, так и переопределенных) строго регулируется компилятором, и возможности в рантайме менять порядок вызова - нет.
  • saxon (08.06.06 17:15) [5]
    Можно еще при помощи статичного метода
    типа так:

    class A
    {

     public A()
    {
        ...
    }


     public A(...)
    {
        ...
    }


    public static A Create(...)
    {
      // тут проверки и все такое
    }

    }

  • saxon (08.06.06 17:18) [6]
    А применять естественно так:
    A a = A.Create(...);
 
Конференция ".Net" » Вызов конструктора из конструктора [C#, WinXP]
Есть новые Нет новых   [120164   +166][b:0][p:0.001]