Элегантные аргументы в конструкторе - PullRequest
1 голос
/ 15 марта 2012

Есть ли элегантный способ передать несколько аргументов в конструктор?

Это мой конструктор:

public _Empresa(string n, string r, string d, int l, string c, string f, string t, string m, string o)
{
    e_nombre = n;
    e_rfc = r;
    e_direccion = d;
    e_delegacion = l;
    e_cp = c;
    e_referencias = f;
    e_telefono = t;
    e_email = m;
    e_observaciones = o;
}

В последнее время в форме окна я называю этот конструктор

public _Empresa empresa
{
    get
    {
        return new _Empresa(_nombre.Text, _rfc.Text, _direccion.Text, int.Parse(_delegacion.SelectedValue.ToString()), _cp.Text, _referencias.Text, _telefono.Text, _email.Text, _observaciones.Text);
    }
}

Они не одного типа, поэтому нет возможности отправить массив. Какие еще варианты у меня есть?

Ответы [ 3 ]

4 голосов
/ 15 марта 2012

Описание

Вы можете передать класс, у которого есть свойства, которые вам нужны в вашем конструкторе.

Пример

класс аргументов

public class EmpresaConstructorArguments
{
     public string Nombre { get;set }
        // ...
}

конструктор

public _Empresa(EmpresaConstructorArguments arg)
{
        e_nombre = arg.Nombre;
        // ...
}

или

private EmpresaConstructorArguments Arguments;

public _Empresa(EmpresaConstructorArguments arg)
{
        this.Arguments = arg; 
}

Извлечение MSDN - ProcessStartInfo Class .

Указывает набор значений, которые используются при запуске процесса.

Обновление

Другой подход заключается в передаче значений с именованными аргументами.

Предположим, ваш класс выглядит следующим образом

public _Empresa empresa
{
    public string Nombre { get; set }
    // ...
}

you can do 

new _Empresa { Nombre : _nombre.Text } 
2 голосов
/ 15 марта 2012

Если некоторые из этих свойств связаны, вы можете сгруппировать их в меньшие классы самостоятельно (чтобы вы могли передать экземпляр этого класса конструктору вашего класса).Однако это просто распространит вашу инициализацию на два или три меньших объекта, поэтому вы должны делать это только в том случае, если это имеет логический смысл для вашего кода, а не только для того, чтобы сделать ваш конструктор более читабельным.

Одна вещь, которая может сделать вашкод, более читаемый, использует именованные параметры и некоторые отступы:

new _Empresa(
  n: _nombre.Text, 
  r: _rfc.Text
  ...
  );

, что также выглядело бы лучше, если бы имена параметров были более информативными

1 голос
/ 15 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...