一、自动实现的属性
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 = 25; Person person2 = new Person("learning hard"); person2.Age = 25; // 如果类没有无参的构造函数就会出现编译时错误 // 因为下面的语句是调用无参构造函数来对类中的字段进行初始化的 // 大括号部分就是对象初始化程序 Person person3 = new Person { Name = "learning hard", Age = 25 }; // 下面代码和上面代码是等价的,只不过上面省略了构造函数的圆括号而已 Person person4 = new Person() { Name = "learning hard", Age = 25 }; Person person5 = new Person("learning hard") { Age = 25 }; } } 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 = 25 }; Console.WriteLine("{0} 年龄为: {1}", person1.Name, person1.Age); // 定义匿名类型数组 var personcollection = new[] { new {Name ="Tom",Age=30}, new {Name ="Lily", Age=22}, new {Name ="Jerry",Age =32}, // 如果加入下面一句就会出现编译时错误 // 因为此时编译器就不能推断出要转换为什么类型 // new {Name ="learning hard"} }; int totalAge = 0; foreach (var person in personcollection) { // 下面代码证明Age属性是强类型的int类型 totalAge += person.Age; } } }