c#使用SET有什么意义?

c#使用SET有什么意义?,c#,C#,我们为什么这样做: private string StatusText { set { toolStripStatusLabel1.Text = value; } } 而不仅仅是这个 private string StatusText { toolStripStatusLabel1.Text = value; } 我不理解使用set?的要点,因为也可能有get: get { return toolStripStatusLabel1.Text; } 属性是语法上的糖。编

我们为什么这样做:

 private string StatusText
 {
    set { toolStripStatusLabel1.Text = value; }
 }
而不仅仅是这个

private string StatusText
{
   toolStripStatusLabel1.Text = value; 
}

我不理解使用set?

的要点,因为也可能有get:

get { return toolStripStatusLabel1.Text; }
属性是语法上的糖。编译时,您将有两个方法
get.[property name]
set.[property name]
。如果您只有set方法,则IL中只有
set[property name]

private String StatusText
{
  get { ... }
  set { ... }
}

get/set标记用于区分get和set访问器。

后者不会编译。
set
部分显示它是属性的setter部分

另一种方法是只编写一个方法:

private void SetStatusText(string value)
{
    toolStripStatusLabel1.Text = value;
}

为了使您能够在需要时应用更复杂的逻辑。

首先不会编译
值,除非您设置了
值,否则
无效

private string StatusText
{
   toolStripStatusLabel1.Text = value; 
}
访问器上查看MSDN

正在设置和获取字段和属性

例如:

private string statusText;
public string StatusText
{
  get { return this.statusText;}          
  set { this.statusText = value;
      toolStripStatusLabel1.Text = this.statusText; 
  }
}

这是两件完全不同的事情

这是一个:

这就是所谓的:

StatusText();
private string StatusText(string value)
{
    toolStripStatusLabel1.Text = value; 
}
StatusText("bla");
StatusText = "bla";
(由于无法找到局部变量
,因此不会编译)。要使它工作,您需要这样写:

StatusText();
private string StatusText(string value)
{
    toolStripStatusLabel1.Text = value; 
}
StatusText("bla");
StatusText = "bla";
这样称呼它:

StatusText();
private string StatusText(string value)
{
    toolStripStatusLabel1.Text = value; 
}
StatusText("bla");
StatusText = "bla";

另一方面,这是a的定义:

其setter(即关键字
set
)的名称如下:

StatusText();
private string StatusText(string value)
{
    toolStripStatusLabel1.Text = value; 
}
StatusText("bla");
StatusText = "bla";

更详细地说,既然OP说她不理解get和set:

使用
get
set
关键字定义“属性”。属性是一对方法,即“getter”和“setter”,当其他代码使用或写入属性时,会在后台使用它们。与显式定义getter和setter方法相比,属性的优点在于,您可以像使用“字段”(一个简单的、公开可见的成员变量)一样使用属性。使用属性而不是字段的优点是,属性允许您自定义赋值或使用变量的行为。您可以创建“计算字段”,在需要时根据对象中的其他数据进行评估,或者在读取或写入值时包含基本验证或其他业务逻辑

要定义属性,首先要像声明字段一样声明它,然后添加带有get和set子块的代码块。然后在get块中定义其读取行为,在set块中定义其写入行为。您可以选择只定义一个访问器(创建“只读”或“只写”属性),也可以为一个函数或另一个函数定义更有限的可见性;例如,可以将getter公开,但setter受保护,这样每个人都可以检查属性的值,但只有类的其他成员和派生类型可以设置其值


最常见的属性实现使用“backing field”,这是一个私有变量,充当属性公开的值的存储。为了简化此实现,.NET3.0包含了“自动属性”的概念;如果没有定义getter和setter的代码体,编译器将使用支持字段生成基本实现。

shalom!在什么情况下你会使用get>?@jenny shalom,我已经用example@jenny属性类似于字段,但具有更大的灵活性。当你问我什么时候需要
get
,如果你问我什么时候需要读取字段的值,答案是一样的。第二个是无效语法。您需要添加一个参数。并应将其命名为SetStatusText。但是单参数集方法不适合C#编码约定,尤其是因为您以后可能想添加getter。@莱恩:我想我不理解get的含义/set@jenny,听起来你应该再读一读这个文件:沙洛姆!我注意到你开始使用asp.netMVC,我也想学习它,但遇到很多麻烦,你能和我分享一些你使用过的教程吗?我从来没有做过任何ASP.NET,只是C.Y.J.JeNY,Hi(-----这里是我认为最好的在线教程)。我认为这还不够,我认为你应该(像我一样)。使用一本书。这本书很好,但我不确定它是否适合你,因为你没有ASP.NET的经验。请记住ASP.NET MVC只是一个框架,建立在ASP.NET上,所以我真的建议你从这本书开始(ASP.NET)。祝你好运(-)+1作为示例。属性便于使用简单的API、数据绑定、逻辑、验证等+1-作为OP的旁注,知道这是一个只写属性的签名也很方便。感谢这么漂亮的答案。真的为我澄清了一些事情