当前位置: 首页 > 编程语言 > C# > 正文

C#3.0笔记(三)var关键字与扩展方法

时间:2010-12-16 博客园 Henllyee Cui

从这篇blog开始真正开始关心3.0里面的特性,本篇主要介绍下Var关键字与 扩展方法。

初识var关键字

C#3.0中为我们提供了var关键字来定 义隐式化的局部变量,定义方式:

var i = 0;
var  myBool = true;
var myString =  "Henllyee";

其实在使用var关键字时,编译器会根据 初始化变量的变量值来推断变量的数据类型,我们可以通过IL来看下上面几句代 码在编译之后的表示:

.locals init ([0] int32 i,
[1] bool myBool,
[2] string myString)

我们可以清 楚的看到编译器会根据值来推断变量的类型,所以var关键字在本质上并没有改 变什么。在foreach字句中也可以使用var关键字如:

var lists  = new List<int>() { 1, 2, 4, 100 };
foreach (var  i in lists)
{
Console.Write(i + ",",  i.ToString());
}

使用var关键字的注意点

1) 隐式类型变量定义时必须要定义初始值;

2) 不能用null来初始化;

3) 不能使用var作为方法的返回值或则参数类型;

4) 不能用var定义类的成员;

扩展方法的由来与定义

当一个 类型被定义好了之被编译进一个程序集后,它的定义工作就已经结束了,一般的 时候我们要添加新的方法的时候,只能去修改代码重新编译(也可以通过反射机 制去修改)。在C#3.0里面为我们提供了扩展方法这样东西。当我们需要为某个 类型添加功能,但又没有源代码的时候,扩展方法是比较好的选择。下面我们来 对object类型定义一个扩展方法:

public static string  DisplayDefinigAssembly(this object obj)
  {
    return String.Format("{0} lives here :\n\t {1}\n", obj.GetType().Name,
      Assembly.GetAssembly(obj.GetType()));
  }

在定义一个扩展方法时要注意三点:

1)必须把方法定义在静态类中,也就是说方法也必须是静态的;

2)所有的方法的第一个参数必须加上this关键字;

3)扩展方法的调用只能在内存中的实例中调用,或则通过静态类调用。

上面的扩展方法就是通过放射机制察看object所在的类型以及程序集。我们 可以看下一个调用的示例:

static void Main(string[] args)
  {

    DataSet ds = new DataSet();
    Console.Write(ds.DisplayDefinigAssembly());
    Console.Read();

  }