2

有人告诉我,您可以替换以下代码:

private string name;

public string Name
{
    get;
    set;
}

具有以下效果并且没有不良影响:

public string Name;

我意识到,在第一个示例中设置的属性与我删除它并将原始属性设置为时几乎相同,public但是对于您只需要基本的getter和setter?

4

6 回答 6

5

第二种方式不是属性,而是字段。您应该始终将属性用于面向公众的值的原因是,从字段转换为属性会构成重大更改。使用属性允许您稍后更改 getter 或 setter 的行为,而不会破坏任何引用您的代码。

请记住,代码 public string Foo { get; set; }

实际上相当于

private string foo;
public string Foo 
{ 
    get { return foo; }
    set { foo = value; }
}
于 2013-04-16T12:04:06.777 回答
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

于 2013-04-16T12:06:10.107 回答
0

公共属性与公共实例变量不同。

这种差异可能很重要。例如,如果您使用数据绑定 asp.net 控件(如 DroDownListBox 中的 DataTextField),如果将其设置为实例变量而不是公共属性,它将失败。

于 2013-04-16T12:09:01.070 回答
0

我认为最短的方法是使用自动实现的属性和一些关于它们的参考信息

在 C# 3.0 及更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使属性声明更加简洁。它们还使客户端代码能够创建对象。如下例所示声明属性时,编译器会创建一个私有的匿名支持字段,该字段只能通过属性的 get 和 set 访问器访问。

公共字符串名称{获取;放;}

于 2013-04-16T12:03:21.130 回答
0

编写属性的最短方法是使用自动 getter 和 setter

不过,这并不是您在问题中提出的,您已经用 field 替换了具有支持 field传统属性

自动 getter/setter 如下所示:

public string Blah { get; set; }

我相信这个特性是在 C# 3 中引入的。因此,您必须针对此或以上,才能使用这些。

于 2013-04-16T12:03:56.420 回答
0
public string Name { get; set; }

微博:

属性是提供灵活机制来读取、写入或计算私有字段值的成员。属性可以像公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。这使得数据可以轻松访问,并且仍然有助于提高方法的安全性和灵活性。

于 2013-04-16T12:04:41.033 回答