如果没有检查,则在C#中使用属性

时间:2014-02-14 00:55:42

标签: c#

如果我有如下课程:

class A
{
  private int _xyz;
  public int XYZ
  {
     get { return _xyz; }
     set { _xyz = value; }       
  }
}

在定义属性方面是否有用,或者将'_xyz'公开是否有意义?

2 个答案:

答案 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 意味着拥有数据。在设计类时,请考虑消息(属性和方法)而不是数据字段。