C# 对象集合初始化
一、自动实现的属性
public class Person
{
// C# 3之前我们定义属性时,一般会像下面这样去定义
// 首先会先定义私有字段,再定义属性来对字段进行访问
//private string _name;
//public string Name
//{
// get { return _name; }
// set { _name = value; }
//} // C# 3之后有自动实现的属性之后
// 对于不需要额外验证的属性,就可以用自动实现的属性对属性的定义进行简化
// 不再需要额外定义一个私有字段了,
// 不定义私有字段并不是此时没有了私有字段,只是编译器帮我们生成一个匿名的私有字段,不需要我们在代码中写出
// 减少我们书写的代码
// 下面就是用自动实现的属性来定义的一个属性,其效果等效于上面属性的定义,不过比之前更加简洁了 /// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
}
二、对象初始化
class Program
{
static void Main(string[] args)
{
Person person1 = new Person();
person1.Name = "learning hard";
person1.Age = ;
Person person2 = new Person("learning hard");
person2.Age = ;
// 如果类没有无参的构造函数就会出现编译时错误
// 因为下面的语句是调用无参构造函数来对类中的字段进行初始化的
// 大括号部分就是对象初始化程序
Person person3 = new Person { Name = "learning hard", Age = };
// 下面代码和上面代码是等价的,只不过上面省略了构造函数的圆括号而已
Person person4 = new Person() { Name = "learning hard", Age = };
Person person5 = new Person("learning hard") { Age = };
}
} public class Person
{
public string Name { get; set; }
public int Age { get; set; } public Person()
{
} public Person(string name)
{
this.Name = name;
}
}
三、集合初始化
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
// C# 3.0之前初始化集合使用的代码
List<string> names = new List<string>();
names.Add("learning hard1");
names.Add("learning hard2");
names.Add("learning hard3"); // 有了C# 3.0中集合初始化特性之后,就可以简化代码
// 同时下面也使用了隐式类型(使用了var关键字)
var newnames = new List<string>
{
"learning hard1","learning hard2", "learning hard3"
};
}
} public class Person
{
public string Name { get; set; }
public int Age { get; set; } public Person()
{
} public Person(string name)
{
this.Name = name;
}
}
}
四、匿名类型
class Program
{
static void Main(string[] args)
{
// 定义匿名类型
// 因为这里不知道初始化的类型是什么,所以这里就必须使用隐式类型
// 此时隐式类型就发挥出了功不可没的作用,从而说明隐式类型的提出是为了服务于匿名类型的
// 而匿名类型的提出又是服务于Linq,一步步都是在微软团队的计划当中
Console.WriteLine("进入匿名类型使用演示:");
var person1 = new { Name = "learning hard", Age = };
Console.WriteLine("{0} 年龄为: {1}", person1.Name, person1.Age); // 定义匿名类型数组
var personcollection = new[]
{
new {Name ="Tom",Age=},
new {Name ="Lily", Age=},
new {Name ="Jerry",Age =}, // 如果加入下面一句就会出现编译时错误
// 因为此时编译器就不能推断出要转换为什么类型
// new {Name ="learning hard"}
}; int totalAge = ;
foreach (var person in personcollection)
{
// 下面代码证明Age属性是强类型的int类型
totalAge += person.Age;
}
}
}
C# 对象集合初始化的更多相关文章
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- C# 3.0 / C# 3.5 对象集合初始化器、匿名类
对象集合初始化器 在 .NET 2.0 中构造一个对象的方法一是提供一个重载的构造函数,二是用默认的构造函数生成一个对象,然后对其属性进行赋值. 在 .NET 3.5/C# 3.0 中,我们有一种更好 ...
- 编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]
前言 软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...
- C#程序编写高质量代码改善的157个建议【16-19】[动态数组、循环遍历、对象集合初始化]
前言 软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...
- C#语法糖之第二篇: 参数默认值和命名参数 对象初始化器与集合初始化器
今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完 ...
- 编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化
建议19:使用更有效的对象和集合初始化 依赖于属性和FCL 3.5之后的语法规则,现在我们有了更加简洁有效的对象和集合初始化机制:对象和集合初始化设定项. 对象初始化: class Person { ...
- C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法
1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...
- C# 对象初始化器和集合初始化器
/// <summary>/// 图书类/// </summary>public class Book { /// <summary> /// 图书 ...
- Linq专题之集合初始化器
集合初始化器用来初始化一个集合,和对象初始化器有点类似,都是用一对{}来初始化. using System; using System.Collections.Generic; using Syste ...
随机推荐
- .net web.config中配置字符串中特殊字符的处理
https://www.cnblogs.com/zzmzaizai/archive/2008/01/30/1059191.html 如果本身字符串中有特殊字符,如分号,此时就需要用单引号整体包裹起来, ...
- python发送钉钉机器人脚本
#!/usr/bin/python# -*- coding: utf-8 -*-import requestsimport jsonimport sysimport os headers = {'Co ...
- java并发编程(四) 线程池 & 任务执行、终止源码分析
参考文档 线程池任务执行全过程:https://blog.csdn.net/wojiaolinaaa/article/details/51345789 线程池中断:https://www.cnblog ...
- 20190815网络与信息安全领域专项赛线上赛misc WriteUp
目录 签到题 题目内容 使用工具 解题步骤 七代目 题目下载地址 使用工具 解题步骤 亚萨西 题目下载链接 使用工具 解题步骤 24word 题目下载链接 使用工具 解题步骤 感想 几星期前报了名却完 ...
- DNS技术和NAT技术详解
DNS技术和NAT技术详解一.DNS(Domain Name System)1.什么是DNS2. 了解域名3.域名解析过程4.使用dig工具分析DNS过程5.浏览器输入URL后发生什么事?二.ICMP ...
- 记一次netty http server给客户端返回reset包排除
类似文章:解决用netty去做web服务时,post长度过大的问题 现象:当客户端给server发送的请求体较大时,服务直接给客户端返回reset包. tcpdump: 应用还没有完全收上去,就clo ...
- Maven 项目中依赖的搜索顺序
Maven 项目中依赖的搜索顺序 http://www.manongjc.com/article/13422.html 执行过程中使用 -e -X 查看详细的搜索地址: 1,中央仓库,这是默认的仓库 ...
- latch - undo global data等待事件分析
一环境跑压力测试的时候,标题所述等待事件在top N中.不用查,也知道是因为undo竞争的事件. 根据metalink文档解释,是由于undo表空间不足引起的. This implies that s ...
- mybatis自定义插件(拦截器)开发详解
mybatis插件(准确的说应该是around拦截器,因为接口名是interceptor,而且invocation.proceed要自己调用,配置中叫插件)功能非常强大,可以让我们无侵入式的对SQL的 ...
- Keras split train test set when using ImageDataGenerator
Keras split train test set when using ImageDataGenerator I have a single directory which contains su ...