有人告诉我你可以替换下面的代码:
private string name;
public string Name
{
get;
set;
}
具有以下条件且不会产生任何不良影响:
public string Name;
我意识到,像第一个示例中那样设置的属性与删除它并将原始属性设置为
public
的效果几乎相同,但是使用第二种方法来设置属性是否是一种不好的编程习惯?你只需要基本的 getter 和 setter?
第二种方式不是属性,而是字段。应始终将属性用于面向公众的值的原因是,从字段转换为属性构成重大更改。使用属性允许您稍后更改 getter 或 setter 的行为,而不会破坏引用您的代码的任何代码。
请记住,代码
public string Foo { get; set; }
实际上相当于
private string foo;
public string Foo
{
get { return foo; }
set { foo = value; }
}
当您使用属性时,您可以更好地控制属性的内容。
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
我认为最短的方法是使用自动实现的属性:
public string Name{ get; set;}
在 C# 3.0 及更高版本中:
自动实现的属性使属性声明更加简洁 当属性访问器中不需要额外的逻辑时。他们 还允许客户端代码创建对象。当你声明一个 属性如下例所示,编译器创建一个 私有、匿名支持字段只能通过 属性的获取和设置访问器。
public string Name { get; set; }
msdn:
属性是提供灵活机制来读取、写入或计算私有字段值的成员。属性可以像公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。这使得数据可以轻松访问,并且仍然有助于提高方法的安全性和灵活性。
公共属性与公共实例变量不同。
这种差异可能很重要。 例如,如果您使用数据绑定 asp.net 控件(例如 DroDownListBox 中的 DataTextField),则如果将其设置为实例变量而不是公共属性,则会失败。
编写属性的最短方法是使用自动 getter 和 setter。
这并不完全是您在问题中提出的内容,您已经用 field 替换了具有 backing field 的 traditional 属性。
自动 getter/setter 看起来像这样:
public string Blah { get; set; }
我相信这个功能是在 C# 3 中引入的。所以你必须瞄准这个或上面,才能使用这些。