构造函数中的优雅参数

时间:2012-03-14 20:40:06

标签: c# winforms constructor

是否有一种优雅的方法可以将多个参数传递给构造函数?

这是我的构造函数:

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;
}

最近在Windows窗体中我调用了构造函数

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 个答案:

答案 0 :(得分:4)

描述

您可以在构造函数中传入一个具有所需属性的类。

示例

参数类

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 } 

答案 1 :(得分:2)

如果其中一些属性是相关的,您可以将它们分组为较小的类(因此您可以将该类的实例传递给类的构造函数)。但是,这只会将初始化扩展到两个或三个较小的对象,因此只有在对代码具有逻辑意义时才应该这样做,而不仅仅是为了使构造函数更具可读性。

使代码更具可读性的一件事是使用命名参数和一些缩进:

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

如果参数名称更具自我描述性,那么它看起来也会更好

答案 2 :(得分:1)

您可以创建一个包含所有参数的对象,然后传递它。 他们中有很多人告诉你他们可能有某种关系可能值得上课。