C#属性使用

C#属性使用,c#,properties,coding-style,implementation,C#,Properties,Coding Style,Implementation,不,这不是关于为什么我们应该在C中使用属性的另一个问题:)我想知道它们之间的主要区别是什么 private string _name; public string Name { get { return _name; } set { _name = value; } } 及 我知道随着.NET3.0的引入,您可以使用后者,但我仍然找到使用前者的代码片段 我很想知道它们在性能(除了我浪费了两倍的空间)、风格和底层实现的工作方式方面有什么不同(如果有的话) 我也想知道你的观点是

不,这不是关于为什么我们应该在C中使用属性的另一个问题:)我想知道它们之间的主要区别是什么

private string _name;
public string Name  {
    get { return _name; }
    set { _name = value; } 
}

我知道随着.NET3.0的引入,您可以使用后者,但我仍然找到使用前者的代码片段

我很想知道它们在性能(除了我浪费了两倍的空间)、风格和底层实现的工作方式方面有什么不同(如果有的话)

我也想知道你的观点是什么,你在代码中使用了哪一种

谢谢你,快乐编码

我知道随着.NET3.0的引入,您可以使用后者

不,是C#3的引入。您可以将.NET2作为目标,但仍然使用自动实现的属性。区分您正在使用的C#版本和目标.NET版本非常重要

但是,您使用的两个代码片段之间没有显著的区别,除了使用自动实现的属性时,其他源代码都无法访问该字段。该字段被赋予一个“无法说出的名称”(在IL中有效,但在C#中无效)。(当您使用自动实现属性时,编译器也会将该属性应用于该属性,但这并不重要。)


无论在时间还是内存上都没有性能差异。

如您所知,此功能称为

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

你的

我很想知道它们之间的区别(如果有的话) 他们的表现(除了我浪费了两倍的时间) 空间),以及底层实现的工作方式

在您的情况下,它们之间的差异和性能没有问题。因为您在设置或检索值时没有执行任何操作(任何验证等)


作为提示,您可以在
set/get
修改器中设置断点,但不能在auto属性中设置断点。另一方面,您必须在普通属性中定义一个字段(
\u name
)。

它们都会给出相同的结果,但您应该知道,属性的“手动”实现使您能够控制设置的内容和接收的内容,这是属性背后的主要思想,例如:

private string _name;
public string Name  {
    get { return _name; }
    set { if(_name.Length > 3) _name = value; } 
}
使用“自动”实现的属性时,您只是拥有一个简单的退化属性:

public string Name { get; set; }

啊,既然它们是以同样的方式实现的,为什么有些人仍然使用旧的方式呢?@EdoardoTygerDominici我想是因为你可以设置断点,就像索纳说的那样。另外,如果setter是私有的,并且类是不可变的,那么可以像我在回答中所说的那样,将底层字段
设置为只读的
@EdoardoTygerDominici,人们可能希望在setter或getter属性中进行一些验证。例如
get{if(_name>0)返回someInt;else返回-1;}
public string Name { get; set; }