为什么我们这样做:c#使用SET有什么意义?
private string StatusText
{
set { toolStripStatusLabel1.Text = value; }
}
,而不是仅仅这一点?
private string StatusText
{
toolStripStatusLabel1.Text = value;
}
我不明白使用set的要点吗?
为什么我们这样做:c#使用SET有什么意义?
private string StatusText
{
set { toolStripStatusLabel1.Text = value; }
}
,而不是仅仅这一点?
private string StatusText
{
toolStripStatusLabel1.Text = value;
}
我不明白使用set的要点吗?
这是两个完全不同的事情。
这是一个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; }
}
其设定器(因此关键字set
)被称为是这样的:
StatusText = "bla";
+1为示例。属性便于API消费,数据绑定,逻辑验证等 – Perpetualcoder 2010-10-19 17:01:57
+1 - 作为OP的旁注,它也很方便地知道这是特别的签名一个只写属性。 – 2010-10-19 17:15:15
因为可能还会有一个GET:
get { return toolStripStatusLabel1.Text; }
属性是语法糖。编译时,您将有两种方法get_[property name]
和set_[property name]
。如果您只有设置的方法,则IL中只有set_[propety name]
。
沙洛姆!在什么情况下你会使用get>? – 2010-10-19 16:51:50
@jenny shalom,我用一个例子修改了 – 2010-10-19 16:53:19
@jenny属性就像字段,但具有更大的灵活性。当你问我什么时候需要'get'的时候,如果你问我什么时候需要读取字段值,答案是一样的。 – Andrey 2010-10-19 16:54:18
private String StatusText
{
get { ... }
set { ... }
}
get/set标记区分get和set存取方法。
@lain:我想我不明白get/set – 2010-10-19 16:52:13
@jenny,听起来像你应该阅读一些更多的文档:http://msdn.microsoft.com/en-us/library/x9fsa0sw(VS.80)。 aspx – 2010-10-19 16:53:18
后者不会编译。 set
部分显示它是属性的setter部分。
另一种方法是只写一个方法:
private void SetStatusText(string value)
{
toolStripStatusLabel1.Text = value;
}
为了使您能够应用更复杂的逻辑,当需要将出现。
沙洛姆!我注意到你开始使用asp.netMVC,我也想学习它,但是有很多麻烦,你能跟我分享一些你有useD的教程吗?我从来没有做过任何asp.net,只是c# – 2010-10-19 16:58:10
@jenny,嗨( - :这是我认为最好的在线教程 - http://nerddinnerbook.s3.amazonaws.com/Part1.htm。我不认为这就够了,我认为你应该(像我一样)使用一本书。这一个 - http://www.amazon.com/Pro-ASP-NET-Framework-Steven-Sanderson/dp/1430210079很棒,但我我不确定它是否适合你,因为你没有ASP.NET的经验。请记住,ASP.NET MVC只是一个基于ASP的框架。NET,所以我真的建议你从那个开始(ASP.NET)。祝你好运( - : – 2010-10-19 17:26:21
首先不会编译为value
是无效的,除非你有set
。
private string StatusText
{
toolStripStatusLabel1.Text = value;
}
退房MSDN上访问者here。
设置和获取字段和属性...
例子:
private string statusText;
public string StatusText
{
get { return this.statusText;}
set { this.statusText = value;
toolStripStatusLabel1.Text = this.statusText;
}
}
在更详细一点,由于运说,她不明白获取并设置:
的get
和set
关键字用于定义一个“属性”。属性是一对方法 - “getter”和“setter” - 在属性被其他代码使用或写入时在幕后使用。与显式定义getter和setter方法相比,属性的优点是您可以像使用“字段”(简单的公共可见成员变量)一样使用该属性。使用属性而不是字段的优点是,属性允许您自定义分配或使用变量的行为。您可以创建“计算字段”,在需要时根据对象中的其他数据进行评估,或者在读取或写入值时包括基本验证或其他业务逻辑。
来定义属性,你开始通过像你宣布它会现场,但随后get和set子块添加一个代码块。然后在get块中定义其读取行为,并在set块中定义写入行为。您可以选择仅定义一个访问器(制作“只读”或“只写”属性),或者可以为一个功能或另一个功能定义更有限的可见性;例如,可以让getter公开,但setter受保护,所以每个人都可以检查该属性的值,但只有该类的其他成员和派生类型可以设置其值。
最常见的属性实现使用一个“支持字段”,充当存储用于由属性露出的值的专用变量。为了简化这个实现,.NET 3.0包含了“自动属性”的概念;如果你没有定义getter和setter的代码体,编译器会使用后台字段生成一个基本的实现。
非常感谢这么多美丽的回答。真正为我澄清的事情 – 2010-10-19 17:26:08
第二个是无效的语法。你需要添加一个参数。并且应该将其命名为SetStatusText。但是一个参数Set方法并不符合C#编码约定,特别是因为您可能希望稍后添加一个getter。 – CodesInChaos 2010-10-19 16:51:54