gpt4 book ai didi

c# - 点在 .net 中的属性

转载 作者:行者123 更新时间:2023-11-30 14:03:47 24 4
gpt4 key购买 nike

你们更喜欢什么?

private Point location;

public int LocationX { get { return location.X; } }
public int LocationY { get { return location.Y; } }

private Point location;

public Point Location { get { return location; } }

第二种方法的问题是 XY 都可以被类的客户端改变,在这种情况下这不是我想要的.我是否应该围绕 Point 进行包装,以便返回不可变的 Point

谢谢

最佳答案

我更喜欢第二种方法,因为 X 和 Y 成员是不可变的(Point 是一个结构,因此是一个值类型)。也就是说,您无法更改位置,因为您无法修改类的 Location 属性的 X 或 Y 属性,因为 Point 是一个值成员。如果你想改变它,你必须实例化一个新的 Point 实例。

看下面的例子,编译器会阻止你改变 Location 属性的 X 或 Y 成员:

class Program
{
private class MyType
{
private readonly Point _location;

public MyType(Point location)
{
_location = location;
}

public Point Location
{
get
{
return _location;
}
}
}

static void Main( string[] args )
{
var someInstance = new MyType (new Point (5, 6));

someInstance.Location.X = 5; // <- compiler error: cannot modify the expression because it is not a variable.
}

关于c# - 点在 .net 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3456554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com