【问题标题】: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
}