以下属性C#之间的区别是什么

时间:2013-08-24 09:31:40

标签: c# properties

我正在使用这两个属性

1)

int x = 0;

public int X
{
    get
    {
        return x;
    }
    set
    {
        x = value;
    }
}

2)

 public string ID
 {
     get;
     set;
 }

这两个属性之间有什么区别。

3 个答案:

答案 0 :(得分:2)

  

当您声明属性时,如下例所示,   编译器创建一个只能是的私有匿名支持字段   通过属性的get和set访问器访问。

Auto-Implemented Properties (C# Programming Guide)

唯一不同的是,在您的示例中,您仍然可以直接获取/设置支持字段,而不是使用该属性。使用自动实现的属性,您无法做到这一点。

答案 1 :(得分:0)

无。两者都是相同的,除了你可以从第二个片段不能做的第一个片段中做到这一点。

int x = 0;

public int X
{
    get
    {
        return x;
    }
    set
    {
        if (value < 0) // A guard condition or some custom condition here
            value = 0;

        x = value;
    }
}

您可以做一个更清晰的答案

private double seconds;

public double Hours
{
    get { return seconds / 3600; }
    set { seconds = value * 3600; }
}

答案 2 :(得分:0)

如果您反而问过,

  

“这两个代码片段之间有什么区别(不仅仅是两个属性之间)?”

您可能已经猜到了答案:在第一个代码段中,您还需要做一件事:您需要为您的属性x明确声明一个支持字段。在第二个代码片段中,您不必执行此操作,因为编译器会为您执行此操作。

因此,两个代码段在功能上是相同的,除了,在第一个代码段中,您可以直接访问该属性的支持字段(x)。在第二个片段中,没有办法执行此操作,因为支持字段是未命名/匿名的。