【问题标题】:(Duplicated) Difference between 'public int x;' and 'public int x { get; set; }(重复)'public int x;'之间的区别和'公共int x {得到;放; }
【发布时间】:2013-11-21 20:27:22
【问题描述】:

之间有什么区别(如果有)

public int x;

public int x { get; set; }

?

【问题讨论】:

  • 第一个是公共变量,第二个是公共属性。
  • 如果只有一个网站可以搜索我不知道的东西,谷歌? google.co.il/…
  • 在这种情况下,他没有任何东西可谷歌。他不知道这是一个“财产”。因此,他究竟能在谷歌搜索中加入什么?我认为这是一个公平的问题......
  • @TomerW:是的,没有找到这个,因为我没有正确的关键术语:/但是谢谢 :)

标签: c# properties duplicates


【解决方案1】:

第一个是公共变量,可以从任何地方访问。

第二个是公共财产

查看属性tutorial了解详情。

属性有很多用途:它们可以在允许数据之前验证数据 改变;他们可以透明地公开数据所在的类上的数据 实际上是从其他来源(例如数据库)中检索到的;他们 可以在数据更改时采取行动,例如引发事件,或 更改其他字段的值。

【讨论】:

    【解决方案2】:

    第一个称为字段。第二个是属性,在本例中是自动实现的属性

    属性的作用类似于字段,但使用 getter 和 setter 函数来检索和设置值。上述属性的另一种写法如下:

    private int _x;
    public int X
    {
        get
        {
            return _x;
        }
        set
        {
            _x = value;
        }
    }
    

    在这种情况下,变量_x 称为支持字段。使用自动实现的属性,您无法访问支持字段或自定义 getter/setter 中的代码,但如果您不需要,它会更短更简洁。

    作为 C# 中的一项规则,大多数时候任何公共成员都应作为属性而不是字段公开。

    【讨论】:

      【解决方案3】:

      这两者之间的区别在于,一个属性可以做一些事情更多,而不仅仅是获取/设置一个变量。
      举个例子:

      private int _x;
      public int x 
      { 
          get 
          {
            //do something
            return _x;
          } 
          set
          {
            if(_x != value)
            PropertyChanged("x");
            _X = value;
          }
      }
      

      当我们设置属性时 - 我们通知某些东西 (PropertyChanged()) 值已更改。仅使用该字段将非常困难

      【讨论】:

      • 是的,但是给出了确切的代码,没有任何附加功能,如事件或值检查,是否有任何实际区别?换句话说,如果您所做的只是设置并直接获取 X 的值,为什么还要在公共属性之后键入 { get set }?
      • 我从不输入'​​get;放;' :-) 我输入“prop”并按 Tab。如果以后我需要添加功能,我已经准备好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      相关资源
      最近更新 更多