与获取属性之间的差异; 组; 并获得无; 组; [重复](Difference betwe

2019-08-22 09:36发布

这个问题已经在这里有一个答案:

  • 在C#3.0 +地产和现场之间的区别 10回答

我不明白,静态属性的区别:

public static int intId;

并获得;设置; 特性:

public int intId
{
  get
  {
    return intId;
  }
  set
  {
    intId = value;
  }
}

什么是这两者之间的区别? 他们的工作就像相同或不同?

Answer 1:

第一个样品是一个领域,而不是财产。

这是一个很好的做法,总是让私人领域,并在性能包它们来代替。

你可以在设置中添加验证或后代重写属性(如果它被标记为虚拟)的方式。 您也可以在获取和设置从那些谁使用你的类被隐藏添加一些棘手的代码。



Answer 2:

第一个是不是属性。 这是一个领域。 这也是一个静态的。

即使它不是静态的,而是一个实例变量,两者是不同的,并编译成不同的IL。

在关于为什么在公共领域使用简单的属性 - 属性让你身后封装实现。 他们让你改变类型内部不改变接口。



Answer 3:

他们是然而,由于其静态INT第一个,它会从类访问,并且可以改变和它的任何实例将具有相同的值的级别相同的int变量。

public static int intId;

第二个将仅仅通过实例,每个实例,因为它不是静态的独特价值进行访问,但它可以通过自公任何人都可以访问。

 public int intId
    {
        get
        {
            return intId;
        }
        set
        {
            intId = value;
        }
    }


Answer 4:

第一种是静态字段; 它甚至不是一个性质。

静态字段对应用程序只有一个值。

而第二个是一个实例属性,这对类的每个实例不同。

它没有在这个例子中一个很大的区别,如果它是一个属性或字段。 但是从长远来看,如果你在你的界面使用属性,你以后可能会改变它有一个实际的getter和setter,对于例如,验证做或使物体以某种方式作出反应的新价值。 字段仅仅是一个领域,你无法控制的时候,它是如何设置和应对它。



Answer 5:

正是这两者之间的区别?

你的第一个代码示例是一个字段,而第二个是一个属性。

字段是class成员,它的值赋给一个class的实例化(如果它在设置class的定义),之前的constructor是被称为并设置或获取它,当你没有任何控制:

public static int intId;

属性是一个class成员,我可以把它描述为一个特殊的“场”,你可以控制的数据将如何设置,并得到它,换句话说-封装,它是一种功能的,但行为像一个字段:

public int intId
    {
        get
        {
            return intId;
        }
        set
        {
            intId = value;
        }
    }

在您的例子中, int属性使用static int场,但你做了错误的使用了两个:

  1. 你的领域应该是一个private改性剂,而不是static ,否则它不会让使用它的意义,因为它可能是来自外部的变化。

  2. 它们都具有相同的名称,将其更改。

像那样:

private int _intId;

public int IntId
{
    get
    {
        return _intId;
    }
    set
    {
        _intId = value;
    }
}


文章来源: Difference between Properties with get; set; and without get; set; [duplicate]