c#3.0系列:Object Initializer 和 Collection Initializer
Object Initializers
Object Initializer的使用很简单:在通过new 关键字创建对象的时候,将所需的Proeprty置于Type name后的{}中。比如:
2 {
3 public string Name { get; set; }
4 public int Age{get; set;}
5 public string Add;
6 public staff()
7 { }
8 public staff(int i, string s)
9 {
10 Name = s;
11 Age = i;
12 }
13 }
使用对象初始化器
2 staff s1 = new staff(12, "sss") { Name = "GUOJUN" };
3 staff s3 = new staff(12, "sss") { Name = "GUOJUN", Age = 27,Add="HuBei" };
4 staff s2 = new staff { Name = "IORI", Age = 27 };
在上面的例子中,我们通过一句代码(staff s1 = new staff(12, "sss") { Name = "GUOJUN" };)实现对staff 对象的创建和初始化。
注意:
在使用对象初始化器时,隐式的调用了默认的构造函数(例如S2的创建及初始化)。
在使用对象初始化器时,也可以指定调用任何自定义的构造函数。(例如S1,S3的创建及初始化)。
可以一次为多个(不一定要全部)属性赋值,
2staff s3 = new staff(12, "sss") { Name = "GUOJUN", Age = 27,Add="HuBei" };
C# 3.x这些Feature仅仅是基于一种Programming Language层面的新特性而已,这些特性通过Programming Language对应的Compiler在编译过程添加一些辅助的Code来实现。 通过编译我们看看变成什么样子:
2{
3 Console.WriteLine("Initializer");
4 staff <>g__initLocal3 = new staff(12, "sss");
5 <>g__initLocal3.Name = "GUOJUN";
6 staff s1 = <>g__initLocal3;
7 staff <>g__initLocal4 = new staff(12, "sss");
8 <>g__initLocal4.Name = "GUOJUN";
9 <>g__initLocal4.Age = 0x1b;
10 <>g__initLocal4.Add = "HuBei";
11 staff s3 = <>g__initLocal4;
12 staff <>g__initLocal5 = new staff();
13 <>g__initLocal5.Name = "IORI";
14 <>g__initLocal5.Age = 0x1b;
15 staff s2 = <>g__initLocal5;
16 Console.WriteLine(s1.Name);
17 Console.WriteLine(s1.Age);
18 Console.WriteLine(s2.Name);
19}
我想上面的代码就不用我太多的说明,大家一定明白。我只说明一点: 调用对应Class的对应的Constructor创建一个临时对象。
Collection Initializer
使用集合初始化器,如下:
2 {
3 new staff {Name = "GUOJUN", Age = 27 },
4 new staff {Name = "IORI", Age = 27 },
5 new staff(12, "sss") { Name = "GUOJUN" }
6 };
7 foreach (staff pt in myListOfstaff)
8 {
9 Console.WriteLine(pt);
10 }
分析Object Initializer的本质一样,我们之后看看通过Compiler变异后的Code是什么样子,就会对Collection Initializer的实现有一个全面的了解:
2 staff <>g__initLocal7 = new staff();
3 <>g__initLocal7.Name = "GUOJUN";
4 <>g__initLocal7.Age = 0x1b;
5 <>g__initLocal6.Add(<>g__initLocal7);
6 staff <>g__initLocal8 = new staff();
7 <>g__initLocal8.Name = "IORI";
8 <>g__initLocal8.Age = 0x1b;
9 <>g__initLocal6.Add(<>g__initLocal8);
10 staff <>g__initLocal9 = new staff(12, "sss");
11 <>g__initLocal9.Name = "GUOJUN";
12 <>g__initLocal6.Add(<>g__initLocal9);
13 List<staff> myListOfstaff = <>g__initLocal6;
14 foreach (staff pt in myListOfstaff)
15 {
16 Console.WriteLine(pt);
17 }
18
Collection Initializer的实现和Object Initializer很类似。
转载于:https://www.cnblogs.com/gjcn/archive/2008/04/15/1154071.html
c#3.0系列:Object Initializer 和 Collection Initializer相关推荐
- 深入理解C# 3.x的新特性(5):Object Initializer 和 Collection Initializer
深入理解C# 3.x的新特性系列自开篇以后,已经有两个月了.在前面的章节中,我们先后深入讨论了C# 3.x新引入的一些列新特性:Anomynous Type.Extension Method.Lamb ...
- Asp.net MVC2.0系列文章-编辑和删除新闻操作
上一篇文章,我们简单地完成了新闻内容的展示功能(Asp.net MVC2.0系列文章-显示列表和详细页面操作),此篇文章,我们使用Asp.net MVC2.0实现新闻记录的编辑和删除功能. 创建Vie ...
- 实战Spring Boot 2.0系列(一) - 使用Gradle构建Docker镜像
前言 通常我们使用 Dockerfile 来构建项目的 Docker 镜像.但是也有使用 gradle 在编译项目的时候一起把镜像给 构建 并 上传 的需求.本文将会讲解如何使用 gradle 编写并 ...
- SpringBoot 2.0 系列003 -- 自定义Parent
为什么80%的码农都做不了架构师?>>> SpringBoot 2.0 系列003 --自定义Parent 默认我们使用SpringBoot的方式是通过SB的parent项目的 ...
- SpringBoot 2.0 系列005 --启动实战之SpringApplication应用
为什么80%的码农都做不了架构师?>>> SpringBoot 2.0 系列005 --启动实战之SpringApplication应用 2.X 官方示例 注意是只使用了@En ...
- 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引
[源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0 1.积少成 ...
- SpringBoot 2.0 系列001 -- 入门介绍以及相关概念
为什么80%的码农都做不了架构师?>>> SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://proje ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...
- vSphere 5.0系列之二 vSphere Client的安装
1.安装包如下载所示,解压之后,可选择安装不同语言 2.开始安装 3.专利说明 4.直接同意 5.两个都要填写 6.安装目录自己可以更改 7.单击安装 8.开始安装的过程 9.到这一步已基本安装完成了 ...
最新文章
- 取eclipse console 打印字符串,判断日志是否有异常
- MySQL输入密码后闪退的解决方法
- UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用
- httpclient爬取性感美图
- HTTP/3 来啦,你还在等什么?赶紧了解一下
- 5个专注于检测和预测异常的Java工具分享
- C语言程序怎么保存文件,急求如何将下列C语言程序数据存储到文件中?
- 【2010】asp.net GridView分页的实现
- Dos命令查看端口占用
- SQL注入漏洞(类型篇)
- 博客目录及最新Github下载地址
- gsp计算机管理权限,新gsp计算机权限设置
- 单例模式中的懒汉模式和饿汉模式是什么?
- ppt五种经典字体组合
- 将多个Excel工作簿合并到一个Excel工作簿中
- 计算机键盘指示灯不亮也不启动不了,终于明白电脑开机黑屏鼠标键盘灯不亮
- 测试网线是否正常的方法有哪些?
- Adobe Premiere Pro 2020 入门教程(三)首选项和快捷键的设置
- java trigger_Quartz教程四:Trigger
- Kibana:如何在 Discover 中显示图片及播放音乐
热门文章
- javascript经典实例_JavaScript 经典实例收集整理
- 如何制作印章_电子公章怎么制作
- 唐尼vr眼镜好吗_科普:眼镜片有哪些种类?镜片越薄越好吗?无框眼镜配什么材质?...
- python 面试题 2020_2020年最全python面试题
- python mq_RabbitMQPython
- 通俗易懂量子计算的原理
- Codeforces 987B. High School: Become Human
- ansible(3)——主机列表,ssh,公钥私钥
- Mysql(7)——auto_increment简介
- 服务器同时登入会被挤下来吗_「英雄联盟手游」苹果iOS版LOL日服公测,日本服务器卡爆!...