编写 C# 属性的最短方法? [重复]

问题描述 投票:0回答:6

有人告诉我你可以替换下面的代码:

private string name;

public string Name
{
    get;
    set;
}

具有以下条件且不会产生任何不良影响:

public string Name;

我意识到,像第一个示例中那样设置的属性与删除它并将原始属性设置为

public
的效果几乎相同,但是使用第二种方法来设置属性是否是一种不好的编程习惯?你只需要基本的 getter 和 setter?

c# syntax standards
6个回答
6
投票

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

请记住,代码

public string Foo { get; set; }

实际上相当于

private string foo;
public string Foo 
{ 
    get { return foo; }
    set { foo = value; }
}

5
投票

当您使用属性时,您可以更好地控制属性的内容。

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


1
投票

我认为最短的方法是使用自动实现的属性

public string Name{ get; set;}

在 C# 3.0 及更高版本中:

自动实现的属性使属性声明更加简洁 当属性访问器中不需要额外的逻辑时。他们 还允许客户端代码创建对象。当你声明一个 属性如下例所示,编译器创建一个 私有、匿名支持字段只能通过 属性的获取和设置访问器。


0
投票
public string Name { get; set; }

msdn:

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


0
投票

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

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


0
投票

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

这并不完全是您在问题中提出的内容,您已经用 field 替换了具有 backing fieldtraditional 属性。

自动 getter/setter 看起来像这样:

public string Blah { get; set; }

我相信这个功能是在 C# 3 中引入的。所以你必须瞄准这个或上面,才能使用这些。

© www.soinside.com 2019 - 2024. All rights reserved.