在c#中何时使用get;set;

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我无法理解初始化变量之间的区别,得到它的值如下:

 //define a local variable.
   int i;

   i= 0;
   Console.WriteLine(i);

以及GET;set;用法:

public int i
{
   get;
   set;
}

i = 0;
Console.WriteLine(i);

提问于
用户回答回答于

基本上,在这种情况下,没有什么区别,使用属性的(许多)优点是能够将事件添加到属性中,如下所示:

  public delegate void ChangedEventHandler(object sender, EventArgs e);

  int m_i = 0;
  public int i 
  {
      get { return m_i; }
      set { m_i = value; iChanged(self, null); }
  }

  public ChangedEventHandler iChanged;

这可以让代码知道我什么时候被更改过(可能会有一些语法错误,我一段时间没有关注C#,但这个想法是相似的)。这在winforms中非常重要,因为这是了解按钮(或类似)何时被点击的主要方式。

此外,这允许在属性的setter中的附加功能,例如检查它是否在一定范围内,如下所示:

  int m_i = 0;
  public int i {

  get { return m_i; }
  set { if (value > 10) throw new Exception("I cannot be greater than 10!"); m_i = value; }
  }
用户回答回答于

让我们暂时忘记属性......你问的真正问题是为什么你需要属性(或者其他语言中的getter和setter)吗?

这是为了促进封装

属性只是为getter和setter提供了一个更好的语法,也就是访问器(事实上,一个属性只是将set()和get()方法包装在内部)。

在C#3中,C#团队提出了自动属性,因为大量的属性对变量没有做任何事情(没有额外的逻辑),所以自动属性对于该场景来说是简短的。

扫码关注云+社区