一、自动实现的属性

    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;
}
}
}

最新文章

  1. ArcGIS快捷键导出
  2. QQ提醒的功能
  3. linux杀掉80端口线程命令
  4. hadoop、spark/storm等大数据相关视频资料汇总下载
  5. C#将Word,Excel与Html,PDF互转
  6. 笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)
  7. 排序算法Java实现(冒泡排序)
  8. php-msf 源码解读【转】
  9. C#-Xamarin的Android项目开发(二)——控件应用
  10. 3Openwrt自定义CGI实现 前后端交互
  11. bzoj5397 circular 随机化(
  12. 文件上传的三种模式-Java
  13. Java之@SuppressWarnings
  14. java 补码实践
  15. make_blobs
  16. 移动APP漏洞趋势
  17. cdoj203-Islands 【并查集】
  18. Centos 7 安装 FFmpeg
  19. C#获取网页内容,并且处理正确编码
  20. HTTP协议基础(未完待续)

热门文章

  1. R语言 rds文件 和 文本文件 转换
  2. HTML5快速写页面的方法
  3. jsch配置sftp服务器ssh免密登录
  4. Metasploit使用内网跳板, 扫描局域网主机
  5. javascript常用方法 - Array
  6. Java学习-053-JSON工具类演示
  7. WebGL学习笔记(十四):一些零碎的记录
  8. SpringCloud 微服务中 @Async 注解自定义线程池 引发的aop 问题
  9. 《Effective Java》第1章 创建和销毁对象
  10. 在Windows平台下使用Gitblit搭建Git服务器图文解说