有人告诉我你可以替换以下代码:
private string name;
public string Name
{
get;
set;
}
以下并且没有任何不良影响:
public string Name;
我意识到第一个示例中设置的属性与我删除它并将原始属性设置为public
时的属性几乎完全相同,但是使用第二种方式是不好的编程习惯对于你只需要基本的getter和setter的属性?
答案 0 :(得分:5)
第二种方式不是财产,而是一个领域。您应该始终将属性用于面向公众的值的原因是从字段转换为属性构成了一个重大变化。使用属性允许您稍后更改getter或setter的行为,而不会破坏引用您的任何代码。
请记住,代码
public string Foo { get; set; }
实际上相当于
private string foo;
public string Foo
{
get { return foo; }
set { foo = value; }
}
答案 1 :(得分:3)
使用“属性”时,您可以更好地控制属性。
private string name;
public string Name
{
get;
set;
}
错了它应该是
public string Name
{
get;
set;
}
或
private string name;
public string Name
{
get { return name;}
set { this.name = value;}
}
有时当你想要在类内部设置变量时你可以使用
public string Name
{
get;
private set;
}
属性结合了字段和方法的各个方面。对于对象的用户,属性似乎是一个字段,访问该属性需要完全相同的语法。对于类的实现者,属性是一个或两个代码块,表示get访问器和/或set访问器。读取属性时执行get访问器的代码块;当为属性分配新值时,将执行set访问器的代码块。没有set访问器的属性被认为是只读的。没有get访问器的属性被认为是只写的。具有两个访问器的属性是可读写的。
来源:http://msdn.microsoft.com/en-us/library/w86s7x04(v=vs.80).aspx
答案 2 :(得分:0)
我认为最简短的方法是使用Auto-Implemented Properties和一些有关它们的参考信息
在C#3.0及更高版本中,当属性访问器中不需要其他逻辑时,自动实现的属性使属性声明更简洁。它们还使客户端代码能够创建对象。当您声明一个属性时,如下例所示,编译器会创建一个私有的匿名支持字段,只能通过属性的get和set访问器进行访问。
public string Name {get;设置;}
答案 3 :(得分:0)
编写属性的最短方法是使用自动getter和setter 。
这不是你提出的问题,但你已经用字段替换了支持字段的传统属性强>
自动getter / setter看起来像这样:
public string Blah { get; set; }
我相信这个功能是在C#3中引入的。因此,您必须将此目标或更高目标设定为使用它们。
答案 4 :(得分:0)
public string Name { get; set; }
msdn:
属性是一种成员,它提供了一种灵活的机制来读取,写入或计算私有字段的值。属性可以像它们是公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。这样可以轻松访问数据,并且仍然有助于提高方法的安全性和灵活性。
答案 5 :(得分:0)
公共财产与公共实例变量不同。
这种差异很重要。 例如,如果您正在使用Databound asp.net控件(如DroDownListBox中的DataTextField),则如果将其设置为实例变量而不是公共属性,则会失败。