一、自动实现的属性
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;
}
}
}