为什么我们这样做:
private string StatusText
{
set { toolStripStatusLabel1.Text = value; }
}
而不仅仅是这个?
private string StatusText
{
toolStripStatusLabel1.Text = value;
}
我不明白使用set的意思吗?
答案 0 :(得分:16)
这是完全不同的两件事。
这是method:
private string StatusText()
{
toolStripStatusLabel1.Text = value;
}
这样称呼:
StatusText();
(并且不会编译,因为无法找到局部变量value
)。为了使它工作,你需要这样写:
private string StatusText(string value)
{
toolStripStatusLabel1.Text = value;
}
并将其称为:
StatusText("bla");
另一方面,这是property:
的定义private string StatusText
{
set { toolStripStatusLabel1.Text = value; }
}
其 setter (因此关键字set
)的调用如下:
StatusText = "bla";
答案 1 :(得分:5)
因为还有一个get:
get { return toolStripStatusLabel1.Text; }
属性是语法糖。编译时,您将有两种方法get_[property name]
和set_[property name]
。如果您只有set方法,那么只有set_[propety name]
将在IL中。
答案 2 :(得分:3)
更详细一点,因为OP已经说她不理解获取和设置:
get
和set
关键字用于定义“属性”。属性是一对方法 - “getter”和“setter” - 在其他代码使用或写入属性时在幕后使用。与显式定义getter和setter方法相比,属性的优点是,您可以将该属性用作“字段”(一个简单的,公开可见的成员变量)。使用属性而不是字段的优点是属性允许您自定义分配或使用变量的行为。您可以根据对象中的其他数据创建在需要时评估的“计算字段”,或者在读取或写入值时包括基本验证或其他业务逻辑。
要定义属性,首先要像对待字段一样声明它,然后添加带有get和set子块的代码块。然后,您可以在get块中定义其读取行为,并在set块中定义写入行为。您可以选择仅定义一个访问者(创建“只读”或“只写”属性),也可以为一个函数或另一个函数定义更有限的可见性;例如,你可以使getter公开,但setter受到保护,所以每个人都可以检查属性的值,但只有类的其他成员和派生类型可以设置它的值。
最常见的属性实现使用“支持字段”,这是一个私有变量,充当属性公开的值的存储。为简化此实现,.NET 3.0包含了“自动属性”的概念;如果你没有定义getter和setter的代码体,编译器会使用支持字段生成一个基本实现。
答案 3 :(得分:2)
首先不会为value
编译无效,除非您有set
。
private string StatusText
{
toolStripStatusLabel1.Text = value;
}
在访问者 here上查看 MSDN 。
设置和获取字段和属性...
示例:
private string statusText;
public string StatusText
{
get { return this.statusText;}
set { this.statusText = value;
toolStripStatusLabel1.Text = this.statusText;
}
}
答案 4 :(得分:1)
private String StatusText
{
get { ... }
set { ... }
}
get / set标记用于区分get和set访问器。
答案 5 :(得分:1)
后者无法编译。 set
部分显示它是属性的setter部分。
另一种方法是编写方法:
private void SetStatusText(string value)
{
toolStripStatusLabel1.Text = value;
}
答案 6 :(得分:1)
使您能够在需要时应用更复杂的逻辑。