`
netatomy
  • 浏览: 43900 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

c#3.0中的新特性(2)

 
阅读更多

7. 扩展方法

扩展方法就是给一个既有的类添加新的方法,这在以前是不可思议的事情,在C#3.0里却是很简单:

public static class MethodsExtentions
{
public static double Distance(this Point pointA, point pointB)
{
return Math(Sqrt(Math.Pow(pointA.X – pointB.X, 2) + Math.Pow(pointA.Y – pointB.Y, 2));
}
}

现在这个Distance方法就附加到Point类上了,记住这个方法必须是静态的,它的类也必须是静态的,被附加的类是其第一个参数,而且前面必须加上关键字this,后面的参数就成为扩展方法的参数。使用的时候Distance()方法可以直接当作Point的实例方法来使用:

Point ptA = new Point(3, 4);
Point ptB = new Point(5, 6);
double distance = ptA.Distance(ptB);
Console.WriteLine(distance);

8. 分部方法

C#2.0支持分部类,即把一个类的定义放在多个文件中,每个类使用partial关键字修饰。现在C#3.0在分部类的基础上支持分部方法,即在一个分部类中声明方法,在另外一个分部类中实现这个方法。

对于分部方法,限制较多:

  1. a. 分部方法使用partial修饰,且返回类型必须是void
  2. b. 分部方法可以有ref参数,但不能有out参数
  3. c. 分部方法是隐式私有的(private),因而不能是虚方法(virtual)
  4. d. 分部方法不能是外部的(extern)
  5. e. 分部方法可以有static和unsafe修饰符
  6. f. 分部方法可以是泛型的。
  7. g. 可以把已经定义且实现了的分部方法创建为委托,但对仅定义的分部方法则不可以。

9. LINQ

LINQ是一种新的编程模型,它通过在.NET语言中直接集成查询支持来实现对数据的访问,简单地说就是在C#3.0中用类似于SQL查询语句的写法来查询数据,从而节省许多代码,提高生产力。数据源可以是对象、DataSet、SQL、XML等,如下图所示:

image

(1). LINQ to Objects

即从任何IEnumerable或者IEnumerable集合中直接查询数据。比如从一个人名组成的数组中查找所有以“G”开头的人,那么可以这样写代码:

string[] allNames = {"Jeffrey", "Kirby", "Gabriel", "Philip", "Ross", "Adam", "Alston", "Warren", "Garfield"};

IEnumerable foundNames = from name in allNames
where name.StartsWith("G")
select name;

看起来和SELECT语句有点像,但是有点奇怪,但是它至少不用我们写循环遍历这个数组了。上面的LINQ语句返回的是一个IEnumerable集合,利用隐式类型,可以再简化一点代码:

var foundNames = from name in allNames
where name.StartsWith("G")
select name;

对得到的结果可以用foreach输出:

foreach (string name in foundNames)
{
Console.WriteLine(name);
}

稍微复杂一点儿的LINQ例子:

var foundNames = from name in allNames
where name.StartsWith("G") || name.Contains("by")
orderby name
select name;

看起来更像SELECT语句了。

(2)LINQ to DataSet(略)

(3) LINQ to SQL(略)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics