先来看一下新的语法
public class Point(int x, int y)
{
}
看仔细了,这个是在类的宣告时,直接加上了 (int x, int y)
这个语法和之前的语法:
public class Point
{
private int x;
private int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
是不是很相似呢?
的确是很相似,不过新的写法还少了一小部份,就是初始化 x 和 y 两个成员
所以,上次提到的 Auto-Properties with Initializers 就派上用场了。
改写一下变成:
public class Point(int x, int y)
{
public int X { get; } = x;
public int Y { get; } = y;
}
将主要构造函式传进来的值,指定给属性 X 和 Y (透过自动属性初始化)
除了上述的语法,也可以写成:
public class Point(public int x, public int y)
{
}
这时,就不需要另外宣告属性 X 和 Y 了。
这种写法 x 和 y 变成了实例的成员。
当然也可以写成如:
public class Point(public readonly int x, public readonly int y)
{
}
如果要进行构造函式的多载(overload)也行。如:
public class Point(public int x, public int y)
{
public Point():this(0, 0){}
}