您的位置:首页 > 编程语言 > C#

C#2008语言特征2--自动属性

2009-03-21 12:34 375 查看
如果你还是使用c#2.0编写代码的话,如果定义一个类,你可能仍然这样编写你的代码。
namespace AutoProperty
{
class Person
{
private string name;

public string Name
{
get { return name; }
set { name = value; }
}
private int age;

public int Age
{
get { return age; }
set { age = value; }
}
private double height;

public double Height
{
get { return height; }
set { height = value; }
}

}
}
在c#中是推荐使用属性来代替public变量的。在项目中也尽量将需要公开的字段定义为属性,代之而来的就是上面代码的冗繁。不管你对这个属性有没有特殊处理,都需要先定义一个私有变量,并将其在get,set方法中返回或赋值。使得代码量大量增加,阅读难度也增加。可是现在c#3.0允许你这样写你的代码了
namespace AutoProperty
{
class AutoPerson
{
public string Name
{ get; set; }
public int Age
{ get;set;}
public double Height
{ get; set; }
}
}
“自动属性”的语言特性提供了一个优雅的方式来使得你的编码更加简洁,同时还保持属性的灵活性。自动属性允许你避免手工声明一个私有成员变量以及编写get/set逻辑,取而代之的是,编译器会自动为你生成一个私有变量和默认的get/set操作。
下面使用Reflector工具反编译一些上面的代码,看一下两个类代码之间的异同,图9-2是Person类的反编译结果。



图9-2
图9-3是AutoPerson类的反编译结果



图9-3
能够看到系统在类AutoPerson类中自动生成了三个私有字段,格式是<属性名>k__BackingFiled。再看一下,属性Age的代码部分,如图9-4所示。



图9-4
现在你应该完全明白自动属性的实现过程了吧。
但是,上面的情形仅仅适用于在get或者set方法中没有任何逻辑判断的情况。如果你需要在get或者set方法中添加逻辑判断,那么不得不重新会到以前传统的写法。所以代码应该是这两种方法的混合体。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐