体验.net3.x(赶个热潮)
前阵3.5出来后就下了vs08来尝尝鲜,
今天正好收到了《你必须知道的.net》(现在开始要深入理解底层了 时间呦),就顺便再体味一下dotnet3.0以来的新特性^^
写个Demo分享一下,
自从微软出了3.0和基于它的一系列新技术后,就掀起了新技术学习热潮^^ 咱们也不能落后,
多少也要了解了解嘛,
从几个新特性看来,最大的特点就是引入基于函数式的编程方式,以及语言动态性,现在非常流行的东东,
目前最优秀的动态语言应该是Ruby了,Ruby on rails的敏捷框架更是cool~~
下面介绍一下几个新特性,每个属性只要一句代码你就明白了,非常简单而强大
对象初始化,CarlXu xu = new CarlXu { Name = "Carl Xu" };
自动属性,public string Name { get; set; }
隐式类型变量,var i=100,是不是像javascript的声明,但是它要求必须对声明的变量初始化,
.net会自动根据初始化的值反过来确定类型,所以它依然是强类型的,
是不是觉得它好像用途不大?继续看下一个新特性
匿名类型 var temp = new { Name = xu.Name, Birthday = xu.Birthday, ExtendsInfo = ext.Extends };
这是本人最喜欢的特性之一,现在知道var的最大好处了吧,配合匿名类型,动态组装一个匿名类
还是体会不到它的好处吗?想想DataSet吧,有了它还需要大费周章的实现一个强类型的DataSet吗?
List<object> temps=new List<object>(5);
temps.Add(temp);
想想看,在做ORM或者对象绑定的时候是不是很完美的动态解决了数据项和实体的映射?还需要不断的给
实体添加额外的属性吗? 理想状态,(ps:还没有尝试..只是一看到var声明和匿名类就马上想到它的强大作用)
扩展方法 代码附在下面的demo里,比较长
想想js的prototype,是不是觉得很相似, .net吸收了这种思想,使得我们可以在目标类之外来对对象添加扩展方法,
只能是方法哦,而且必须是静态,为什么要这样呢,应该和c#是预编译的有关系(猜测 ),不过这已经可以让我们
享受如javascript的自由了
最后一个就是查询表达式,
Linq~~~不用再写难以维护的sql了,Hql也可以抛弃了,因为微软给我们实现了强大的语言级查询功能;
在vs2008中的表达式会有自动语法提示
敲了那么多字该结帖贴代码了^^
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CarlXu.NT3.X.Demo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("It's my demo for .net3.X.");
Console.WriteLine("");
CarlXu xu = new CarlXu { Name = "Carl Xu" };
ExtendInfo ext = new ExtendInfo { Belong = xu.Name, Extends = "my extension" };
var temp = new { Name = xu.Name, Birthday = xu.Birthday, ExtendsInfo = ext.Extends };
Console.WriteLine("step1 Now,Get My Info:" + temp.Name + "," + temp.Birthday.ToString("yyyy-MM-dd") + "," + temp.ExtendsInfo);
Console.WriteLine("");
Console.WriteLine("step2 Then the extension methods are working");
xu.ShowInfo();
string str = "demo";
str.TellType();
Console.WriteLine("");
Console.WriteLine("step3 Last, use Linq:");
List<CarlXu> list = new List<CarlXu> {
new CarlXu{Name = "Carl"},
new CarlXu{Name = "Xu"},
new CarlXu{Name = "Xu"},
new CarlXu{Name = "Xu"},
new CarlXu{Name = "Carl Xu"}
};
IEnumerable<CarlXu> results = from item in list where item.Name == "Xu" select item;
foreach (CarlXu x in results)
{
Console.WriteLine("Find:" + x.Name);
}
Console.WriteLine("");
Console.WriteLine("step4 over");
Console.ReadKey();
}
}
class CarlXu
{
public string Name { get; set; }
//readonly propertity
public DateTime Birthday { get { return DateTime.Parse("1987-08-07"); } }
}
/// <summary>
/// Extend Info for CarlXu
/// </summary>
class ExtendInfo
{
public string Belong { get; set; }
public string Extends { get; set; }
}
static class MyExtension
{
//Extension Method for CarlXu
public static void ShowInfo(this CarlXu u)
{
Console.WriteLine("1:" + u.Name);
Console.WriteLine("2:" + u.Birthday);
}
//Extension Method for string
public static void TellType(this string s)
{
Console.WriteLine("Type:" + s.GetType().Name);
}
}
}
环境是vs2008Express .net3.5
过阵抽空多多学习~也赶赶技术热潮
还有我个人很看好的WCF
额 最后顺便也说下几个新的基础组件
WPF
WCF windwos通信基础,整合了几乎所有微软的分布式应用
WF 就是微软推出的工作流引擎,之前已经有Sharepoint平台的WF开发
WCS 不是很清楚它的用意
也许你已经了解了3.0的新技术,甚至已经在实际项目应用它们了,本文只是做一个新特性的纵览