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

来源:互联网 发布:金钱观知乎 编辑:程序博客网 时间:2024/04/28 18:23

 

如果你还是使用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变量的。在项目中也尽量将需要公开的字段定义为属性,代之而来的就是上面代码的冗繁。不管你对这个属性有没有特殊处理,都需要先定义一个私有变量,并将其在getset方法中返回或赋值。使得代码量大量增加,阅读难度也增加。可是现在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-2Person类的反编译结果。

1

 

9-2

9-3AutoPerson类的反编译结果

2

 

9-3

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

3

 

9-4

现在你应该完全明白自动属性的实现过程了吧。

但是,上面的情形仅仅适用于在get或者set方法中没有任何逻辑判断的情况。如果你需要在get或者set方法中添加逻辑判断,那么不得不重新会到以前传统的写法。所以代码应该是这两种方法的混合体。

原创粉丝点击