C#Constructor默认参数

时间:2017-01-08 20:31:30

标签: c# parameters constructor default repeat

C#中的构造函数通常会对已经存在的符号重复很多分配。

举个例子:

 class P{
    int x;
    int y;
    int z;
    P(int x,int y,int z,...)
     {
       this.x=x;
       this.y=y;
      this.z=z;
      /...
    }
 }

有没有办法默认将构造函数输入分配给同名字段。 为每个班级重新实现这个一对一的地图是没有意义的。

2 个答案:

答案 0 :(得分:0)

目前无法实现。

但是C#backlog中有一个名为Records的功能。虽然我不确定我们是否会在C#7中看到它。记录类型允许一行定义具有一组属性的类,这些属性将自动分配给构造函数参数。 E.g。

public class Point(int X, int Y);

相同
public class Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
       X = x;
       Y = y;
    }

    // plus Equals, GetHashCode, With
}

答案 1 :(得分:0)

不是你想的方式(如果我理解你的话)。构造函数的参数名称和字段/属性的名称实际上只是人类的方便标签。一个类应该是独立的并封装它的状态。即使允许编译器选项使外部(传入)名称等同于内部的名称也会混淆该概念。

你可以这样做:

    public class foo {
    public int X { get; set; }
    public string Y { get { return X.ToString(); } }
    public double Z { get; private set; }
    private foo(int x) { X = x; }
    public foo(int x, string y, double z = 1.0): this(x) {
        Z = z;
        }
    }

公共构造函数使用私有构造函数(或其他公共构造函数)来完成一些工作(如最后一个foo构造函数那样)。并且您使用可选参数(因为在最后一个foo构造函数中显示了z)。