下面两个POCO类的实现有什么区别?
class Test
{
int _var1;
string _var2;
public int var1
{
get
{
return _var1;
}
set
{
_var1 = value;
}
}
public string var2
{
get
{
return _var2;
}
set
{
_var2 = value;
}
}
}
和
class Test2
{
int _var1;
string _var2;
public int var1
{
get;
set;
}
public string var2
{
get;
set;
}
}
答案 0 :(得分:6)
第一个是带有支持字段的常规属性实现,第二个是auto-implemented properties,并且不会使用这些字段,因为编译器会为您生成支持字段。
自动实现的属性使您无需编写支持字段和样板代码来访问它们,编译器会在IL中创建不会与类中其他字段名称冲突的C#可命名支持字段。
最终效果是 它们是等效的 ,虽然我听说由于支持字段的名称而导致自动属性的序列化问题,让我找到问题...对不起,我现在似乎无法找到它。
答案 1 :(得分:2)
功能明智没有区别。编译器将从第2版生成第一个版本。
答案 2 :(得分:1)
第二个实现称为Auto-Properties
,这是框架3.0中引入的一个特性。
第一个实现是框架3.0之前的传统方式。
有关自动属性的示例,请参阅此link。在引擎盖下,自动属性将为您生成支持字段。
请查看此链接,arguments against their use。
答案 3 :(得分:1)
您可以在第一个实现中直接访问底层。
但事实上,第二个实现在幕后产生第一个,除了其他支持属性。
答案 4 :(得分:1)
属性在功能上是相同的,但在第二个属性中,您的私有变量_var1
和_var2
将永远不会被使用。
在第一个中,您将使用属性返回私有变量的实例。
在第二种情况下,编译器会生成字段并在后台处理它们的分配,因此您无需显式声明它们。
答案 5 :(得分:0)
在第二种情况下,编译器会自动为您添加一个字段,并包装该属性。它基本上等同于使用支持字段。
答案 6 :(得分:0)
两者对于开发者而言完全相同