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方法中添加逻辑判断,那么不得不重新会到以前传统的写法。所以代码应该是这两种方法的混合体。
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方法中添加逻辑判断,那么不得不重新会到以前传统的写法。所以代码应该是这两种方法的混合体。
相关文章推荐
- Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器
- 3、步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- C#2008语言特征1---隐含类型本地变量
- C#2008语言特征3----扩展方法
- 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Ext
- 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Ext
- C#2008语言特征4----局部方法
- VS2008&C#3.5语言特色系列[视频]:自动属性(Automatic Properties)
- C#2008语言特征5----对象和集合初始值语法
- C#2008语言特征6----匿名类型
- 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- 新的C#语言特性:自动属性(Automatic Properties)
- 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)
- VS 2008 + .NET 3.5 - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- 笔记<二>C# 字段、属性、自动属性(转)
- asp.net 2.0教程 c#语言中的类、属性、方法
- C# 3.0 的自动属性(Automatic Properties)
- C#可以自动在后台为属性创建字段
- 使用Visual Studio 2005 IDE的宏,自动为c#变量生成属性
- [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法