如果我有如下课程:
class A
{
private int _xyz;
public int XYZ
{
get { return _xyz; }
set { _xyz = value; }
}
}
在定义属性方面是否有用,或者将'_xyz'公开是否有意义?
答案 0 :(得分:5)
属性允许您稍后更改实现,而不会破坏类的面向公众的API。
您当前的财产没有特殊用途,因此您可以将其设为自动财产:
public int XYZ { get; set; }
这为您提供了一个属性,您可以在以后更改(如果需要),而不会破坏类型。
例如,稍后您可能希望记录该属性已更改(错误示例,但您明白了):
private int _xyz;
public int XYZ
{
get { return _xyz; }
set { _
xyz = value;
_logger.Log("Changed XYZ");
}
}
这不会破坏任何其他代码,也不需要重新编译依赖于此类型的其他程序集。
(记录属性更改是一个不好的示例,因为您可能不希望记录属性更改,特别是如果它们经常更改。这仅用于演示目的)
答案 1 :(得分:0)
在Class中,在OOP中使用封装是一个很好的做法,即使目前你不打算检查getter或setter(属性)中的任何内容。
无论如何,如果你的类只有一个int类型的成员而根本没有行为,我会建议你使用Struct而不是Class。根据MSDN文档:
通常,类用于模拟更复杂的行为或数据 在创建类对象后要修改的内容。 结构最适合包含的小型数据结构 主要是在结构之后不打算修改的数据 创建
我会说 Classes (Objects)意味着行为,而 Structs 意味着拥有数据。在设计类时,请考虑消息(属性和方法)而不是数据字段。