感受 C# 3.0 的优雅
问:真的有必要用 C# 3.0 吗?
答:可以不用,但我们不能忽视它的好处。
-------- 以下是我给的一个例子 --------------------------
只有开始编码,你才能体会 C# 3.0 的优雅。
对比下面分别用 C# 2.0 和 3.0 写的同一个类型效果,你感觉到了什么?代码变得更加简洁,没有了属性和其关联字段间的重复劳动,也可以少写几个 "无聊" 的构造方法。或许很多人对语法简化持保留意见(包括我本人),但不可否认 3.0 的语法更利于维护,当我们臃肿的的工程代码从 50000 行缩减到 20000 行时,那么它所带来的就不仅仅是少敲键盘这么点好处了。
C# 2.0
C# 3.0
我的工程中还出现了 CharExtension、StringExtension,甚至是 ObjectExtension 这样的 Mixin,至于 Lambda、Anonymous types、Linq 自不必多说。
答:可以不用,但我们不能忽视它的好处。
-------- 以下是我给的一个例子 --------------------------
只有开始编码,你才能体会 C# 3.0 的优雅。
对比下面分别用 C# 2.0 和 3.0 写的同一个类型效果,你感觉到了什么?代码变得更加简洁,没有了属性和其关联字段间的重复劳动,也可以少写几个 "无聊" 的构造方法。或许很多人对语法简化持保留意见(包括我本人),但不可否认 3.0 的语法更利于维护,当我们臃肿的的工程代码从 50000 行缩减到 20000 行时,那么它所带来的就不仅仅是少敲键盘这么点好处了。
C# 2.0
class User
{
private string name;
private int age;
private List<string> interest;
public User()
{
interest = new List<string>();
interest.Add("读书");
interest.Add("上网");
}
public User(string name, int age) : this()
{
this.name = name;
this.age = age;
}
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public List<string> Interest
{
get { return interest; }
}
}
// Invoke
User user = new User("tom", 21);
{
private string name;
private int age;
private List<string> interest;
public User()
{
interest = new List<string>();
interest.Add("读书");
interest.Add("上网");
}
public User(string name, int age) : this()
{
this.name = name;
this.age = age;
}
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public List<string> Interest
{
get { return interest; }
}
}
// Invoke
User user = new User("tom", 21);
C# 3.0
class User
{
public User()
{
Interest = new List<string> { "读书", "上网" };
}
public string Name { get; set; }
public int Age { get; set; }
public List<string> Interest { get; private set; }
}
// Invoke
var user = new User
{
Name = "tom",
Age = 21,
};
{
public User()
{
Interest = new List<string> { "读书", "上网" };
}
public string Name { get; set; }
public int Age { get; set; }
public List<string> Interest { get; private set; }
}
// Invoke
var user = new User
{
Name = "tom",
Age = 21,
};
我的工程中还出现了 CharExtension、StringExtension,甚至是 ObjectExtension 这样的 Mixin,至于 Lambda、Anonymous types、Linq 自不必多说。