【问题标题】:C# Constructor default argumentsC# 构造函数默认参数
【发布时间】:2017-01-08 20:31:30
【问题描述】:

通常,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;
      /...
    }
 }

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

【问题讨论】:

标签: c# parameters constructor default repeat


【解决方案1】:

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

你可以这样做:

    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 所示)。

【讨论】:

    【解决方案2】:

    目前不可能。

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

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 2012-02-26
      • 2016-03-01
      • 1970-01-01
      • 2012-06-30
      • 2014-05-15
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多