一、自动实现的属性

    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# 对象集合初始化的更多相关文章

  1. C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

    1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...

  2. C# 3.0 / C# 3.5 对象集合初始化器、匿名类

    对象集合初始化器 在 .NET 2.0 中构造一个对象的方法一是提供一个重载的构造函数,二是用默认的构造函数生成一个对象,然后对其属性进行赋值. 在 .NET 3.5/C# 3.0 中,我们有一种更好 ...

  3. 编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]

    前言   软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...

  4. C#程序编写高质量代码改善的157个建议【16-19】[动态数组、循环遍历、对象集合初始化]

    前言   软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...

  5. C#语法糖之第二篇: 参数默认值和命名参数 对象初始化器与集合初始化器

    今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完 ...

  6. 编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化

    建议19:使用更有效的对象和集合初始化 依赖于属性和FCL 3.5之后的语法规则,现在我们有了更加简洁有效的对象和集合初始化机制:对象和集合初始化设定项. 对象初始化: class Person { ...

  7. C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法

    1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...

  8. C# 对象初始化器和集合初始化器

    /// <summary>/// 图书类/// </summary>public class Book {     /// <summary>     /// 图书 ...

  9. Linq专题之集合初始化器

    集合初始化器用来初始化一个集合,和对象初始化器有点类似,都是用一对{}来初始化. using System; using System.Collections.Generic; using Syste ...

随机推荐

  1. Android Studio 之 SharedPrefences 数据持久性保存

    SharedPreferences 会在应用包目录中生成一个xml文件,将数据保存在里面 可以实现数据持久性保存. 创建的数据,保存在 Data -> Data -> 包名 -> s ...

  2. keepalived haproxy 主备配置

    global_defs { router_id k8s_master} vrrp_script chk_http_port {script "/etc/keepalived/check_ha ...

  3. 线程池ScheduledThreadPoolExecutor

    Java中调度线程池ScheduledThreadPoolExecutor原理探究 一. 前言 前面讲解过Java中线程池ThreadPoolExecutor原理探究,ThreadPoolExecut ...

  4. window.showModelessDialog传值

    参数传递:1.   要想对话框传递参数,是通过vArguments来进行传递的.类型不限制,对于字符串类型,最大为4096个字符.也可以传递对象,例如:------------------------ ...

  5. 假如 Redis Cluster 模式用在 T-io 上

    前言   前几天在学习Redis Cluster 模式的时候,突然想到如果把它的集群模式应用在T-io上也是挺有意思的一件事情. Redis 集群简介    Redis Cluster 中有 N 台实 ...

  6. centos7没有ifconfig命令解决办法

    输入ifconfig 提示不存在   首先确认下是否是环境变量没有ifconfig 引起. ls /sbin/ifconfig   以上确定了系统是没有安装ifconfig,下面我们来安装 yum i ...

  7. Android之WebRTC介绍(二)

    WebRTC提供了点对点之间的通信,但并不意味着WebRTC不需要服务器.暂且不说基于服务器的一些扩展业务,WebRTC至少有两件事必须要用到服务器: 1. 浏览器之间交换建立通信的元数据(信令)必须 ...

  8. (转) centos7 RPM包之rpm命令

    原文:https://blog.csdn.net/capecape/article/details/78529159 RPM包与源码包的区别1.软件包分类 源码包:C源代码包 rpm包:编译之后的二进 ...

  9. Ubuntu系统配置双网卡ssh放外网

    (下面的IP,最后一位都用X代替) 先看看网卡设备的名字,下面要用(一般就是前两个):ifconfigsudo lshw -C network| grep -e  'logical name' 设置服 ...

  10. IDEA中提示配置jdk1.8

    问题描述:运行Java Web项目时,IDEA中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除 解决方法:1. 打开[File]—[Project Structure] ...