c#属性用法
本文关键字:用法 属性 | 更新日期: 2023-09-27 18:15:17
不,这不是关于为什么我们应该在c#中使用属性的另一个问题:)我想知道
的主要区别是什么private string _name;
public string Name {
get { return _name; }
set { _name = value; }
}
和
public string Name { get; set; }
我知道,随着。net 3.0的引入,您可以使用后者,但我仍然发现使用前者的代码片段。
我很想知道它们之间在性能(除了我浪费了两倍的空间),风格和底层实现如何工作方面的差异(如果有的话)。
我也想知道你的意见,以及你在代码中使用哪一个。
谢谢你,快乐的编码!
我知道随着。net 3.0的引入,您可以使用后者
不,是c# 3的引入。你可以瞄准。net 2,并且仍然使用自动实现的属性。区分你正在使用的c#版本和你要瞄准的。net版本是很重要的。
但是您使用的两个代码段之间没有明显的区别,除了当使用自动实现的属性时,没有其他源代码可以访问该字段。该字段被赋予一个"不可言说的名称"(在IL中有效,但在c#中无效)。(当您使用自动实现的属性时,编译器也会将[CompilerGenerated]
属性应用于该属性,但这很少重要。)
您知道,此功能称为Auto-Implemented Properties
从你在c# 3.0及以后的版本中,自动实现的属性使当不需要附加逻辑时,属性声明更简洁在属性访问器中。它们还支持创建客户端代码对象。如下所示声明属性时例如,编译器创建一个私有的、匿名的支持字段
我很想知道它们之间的区别是什么(如果有的话)(除了我浪费了两倍的时间
在你的情况下,它们之间的差异和性能没有问题。因为在设置或检索值时,您没有做任何事情(任何验证或等等)。
作为提示,您可以在set/get
修饰符中设置断点,但不能在auto属性中设置。作为另一个,您必须在normal属性中定义一个字段(在您的示例中为_name
)。
它们都会给你相同的结果,但你应该意识到一个事实,即属性的"手动"实现使你能够控制设置什么和接收什么,这是属性背后的主要思想,例如:
private string _name;
public string Name {
get { return _name; }
set { if(_name.Length > 3) _name = value; }
}
而对于"auto"实现属性,你只是有一个普通的退化属性:
public string Name { get; set; }