c#3.0系列:Automatic Property

之前的做法:

在c#3.x出来之前,相信大家已经习惯通过一个private field + public property的发式来定义和实现一个public Property。就如下面方式实现。

1class person
2  {
3    private int age;
4    private string _name;
5    public int Age
6    {
7      get { return age; }
8      set { age = value; }
9    }
10    public string Name
11    {
12      get { return _name; }
13      set { _name = value; }
14    }
15  }

显然你可以在Property中的set/get代码块中,我们可以不受限制地定义我们 的业务逻辑,但是在大多是场合下,我们都是像上面的code一样直接对一个定义 的field进行操作:对其读写。但是我们如果根据项目的需要,例如作为 Business Entity的Class,需要封装非常多的数据,我们需要为不同类型的数据 分别定义一个Property,这样不断重复的工作大家一定觉得很厌烦。

Automatic Property Overview

在c#3.x出来之后,我们可以通过Automatic Property来简化我们的操作。例 如:

1class Employee
2  {
3    //public string Name { get; } error
4    public string Name { get; set; }
5    public int Age{get; private set;}
6    public Employee(string name,int age )
7    {
8      this.Name = name;
9      this.Age = age;
10    }
11  }

上面的好处我就不用说了。

Automatic Property IN CLR

首先让我们看看c#3.x出来之前和出来之后,编译器是怎么处理的:

大家可以看到,C#3.x仅仅是基于.NET Programming Language,而不是基 于.NET Framework的。加了一些必要的code,使原本我们看起来显得残缺的code (比如缺少对Property 的实现)变得完整。在运行的时候,这些code和原来的 code是完全一样的。Automatic Property代码里多处了两个域 <Age>k_BackingField和<Name>k_BackingField,他们的作用就是 :他们分别对应着两个Property(Age,Name),其作用和person中定义的两个 Field(Age,Name)完全一样。代码如下:

internal class Employee
{
// Fields
[CompilerGenerated]
private int <Age>k__BackingField;
[CompilerGenerated]
private string <Name>k__BackingField;

// Methods
public Employee(string name, int age);

// Properties
public int Age { get; private set; }
public string Name { get; set; }
}

Quiz for Automatic Property

时间: 2025-01-02 16:41:05

c#3.0系列:Automatic Property的相关文章

黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级)

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级) 企业库提供了一个很强大的验证应用程序模块,特点是: 可以通过配置为你的程序中特定的类来定义规则集. 是为你的类的公有属性,即对外开放的属性进行验证的. 使用企业库验证应用程序模块的优势: 有助于保持一致的验证方法. 包括大多数标准验证,包括.NET数据类型校验. 它让您可以将多个规则集具有相同的类和该类的成员. 它可以让你申请一个或多个

ActionScript 3.0系列教程(4):爽快使用XML

xml|教程 ActionScript 3.0系列教程(3):Document Class特色为我们带来了什么? ActionScript 3.0系列教程(4):爽快使用XML 为什么放弃AS2.0选择AS3.0?如果只允许我说三个理由.那么AS3.0对XML的近乎完美的支持绝对是其中一个. 简单说说AS3.0中对于XML支持的不同吧: .AS2.0对XML的支持勉勉强强,将就着可以用.而AS3.0中对XML的支持是全方位的,极其强大和灵活的. AS2.0对XML的支持不是内建的(build-i

Flash ActionScript 3.0系列教程

教程 作者的blog: www.kingda.org ActionScript 3.0系列教程(1):与Flash9先来一次亲密接触! Flash Professional 9 ActionScript 3.0 Preview 版本今天发布了,意味着从此我们从此不仅仅只能使用Flex 2来使用AS3.0,更可以使用我们一直很熟悉的Flash IDE来进行AS3.0开发了. 与Flex 2不同,Flash 9 alpha(即上面的Flash Professional 9 ActionScript

稳扎稳打Silverlight 3.0系列文章索引

相关文章:稳扎稳打Silverlight 2.0系列文章索引 在线DEMO http://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.html 1.稳扎稳打Silverlight(33) - 3.0控件之AutoCompleteBox,DataPager 介绍 Silverlight 3.0 控件一览: AutoCompleteBox - 自动完成控件.当用户输入部分信息后,此控件可以基于指定的过滤算法在一个下拉框中陈列出匹配项 Data

Asp.net MVC2.0系列文章-显示列表和详细页面操作

上一篇文章,我们简单地完成了新闻的添加操作(Asp.net MVC2.0系列文章-添 加操作)此篇文章,我们使用Asp.net MVC2.0实现新闻清单的展示和新闻详细页面 . 创建View视图Index和NewsDetails 创建新闻首页,用来显示新闻列表. 在Views/News目录下,单击右键,选择Add->View,修改相关配置如下图所 示 在生成的HTML代码中,进行相关展示方面的修改.主要代码如下: <% foreach (var item in Model) { %> &

Entity Framework 5.0系列之Code First数据库迁移

我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Code First如何更新已有的模型呢?今天我们简单介绍一下Entity Framework的数据迁移功能. Entity Framework配置 在开始今天的话题之前先来看一下Entity Framework的配置,因为有很多朋友因为配置文件的问题造成"Migrations"命令执行失败.

VS 2010 和 .NET 4.0 系列之《VS 2010代码智能提示的改进》篇

本系列文章导航 VS 2010 和 .NET 4.0 系列之<ASP.NET 4 中的SEO改进 >篇 VS 2010 和 .NET 4.0 系列之<干净的Web.Config文件 >篇 VS 2010 和 .NET 4.0 系列之<起始项目模板>篇 VS 2010 和 .NET 4.0 系列之<多定向支持>篇 VS 2010 和 .NET 4.0 系列之<多显示器支持>篇 VS 2010 和 .NET 4.0 系列之<代码优化的Web开发

LXD 2.0系列之二:LXD安装和配置

本文讲的是LXD 2.0系列之二:LXD安装和配置,[编者的话]第三方调查报告显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Graber有关LXD连载博文的第二篇. [LXD 2.0系列开篇:是时候讨论LXD的一切了][LXD 2.0系列之一:LXD简介][LXD 2.0系列之二:LXD安装和配置][LXD 2.0系列之三:你的第一个LXD容器][LXD 2.0系列之四:资源管理][LXD 2.0系列之五:镜像管理][LXD 2.0系列

[渣译文] SignalR 2.0 系列: SignalR 自托管主机

原文:[渣译文] SignalR 2.0 系列: SignalR 自托管主机 英文渣水平,大伙凑合着看吧-- 这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第六篇: SignalR 自托管主机 原文:SignalR Self-Host PS.前面的那篇在MVC5上使用SignalR跳过了--MVC5跟HTML的实现完全一样,只是将HTML的脚本放在View里面了,这里就跳过了.有兴趣的同学可以自己去看. 概