2006-12-09

深入理解C# 3.0的五项主要改进

来源: 本站收集整理 作者:佚名 评论 0 条
 

  1.隐型局部变量

  C# 3.0引入了一个叫做“var”的新要害字。这个要害字答应开发者建立一个变量,但不必明确它的类型。例如,用var说明一个字符串,就像这样:

varmyData = "This is my data";

  注重,这里并没有提到myData变量是一个字符串,而C# 2.0却要求这一点。

  虽然var答应您建立隐含的类型,它并没有降低C#浓厚的类型特征。var要害字只有在建立变量时有用,一旦您建立变量并且确定它的类型以后,就不能再用var来改变一个变量的类型。

  例如,这段代码没有作用:

varmyDate = DateTime.Now;
myDate = "Hello.";

  使用var要害字还会产生一个有趣的结果,它可以帮助开发者减少建立变量时的代码输入。例如,在C# 2.0中建立一个Customer对象,需要输入以下代码:

Customer myCustomer = new Customer();

  使用新的var要害字,则只要输入:

varmyCustomer = new Customer();

  var要害字的另一个特点在于,使用它可以避免改变一个返回某个类型对象的方法调用。例如,在C# 2.0中,假如您需要调用一个返回Customer对象的方法,您应该编写以下代码:

Customer myCustomer = GetByName("Zach");

  假如某个时候GetByName方法返回一个不是Customer的对象,这段代码就无法编译。但是,假如应用var要害字,您就不用担心GetByName返回的对象类型。

varmyData = GetByName("Zach");

  现在,因为应用了var要害字,GetByName方法能够进行改变,返回一个Person对象,这个方法调用也依然有效。

  2.extension方法

  在C#中,您不能继续和扩充用访问标识符标记为“封装”的类型。但在C# 3.0中,extension方法答应您扩充任何类,甚至是标记为封装的类。例如,假如希望添加一个NoSpaces()方法到字符串类中,我们要定义一个类似列表A中的extension方法。

  列表A

namespaceMyExtensionMethods
{
 public static class Extension
 {
  public static void NoSpaces(this string data)
  {
   return data.Replace(" ", "");
  }
 }
}

  在一个类中导入这个extension方法时,开发者就能够对这个类包含的任何字符串调用NoSapces()方法。

  extension方法的第一个参数决定extension方法的有效类型。在这种情况下,“这个字符串数据”(this string data)表明extension方法适用于字符串类;假如extension方法以“这个对象数据”(this object data)为第一个参数,则说明这个方法对每个对象有效。

  要表明您希望导入extension方法,只需在它们的命名空间中包括一个using指令。例如,要应用上面说明的方法,需要在类文件中包括一个using MyExtensionMethods指令:(列表B)

  列表B

usingMyExtensionMethods;
namespace MyNamespace
{
 public class MyClass
 {
  public MyClass()
  {
   string data = "this is my data";
   //nospaces will contain "thisismydata".
   string nospaces = data.NoSpaces();
  }
 }
}

  注重extension方法的优先度比instance方法低。因此假如instance方法和extension方法有同样的签名,则应执行instance方法。

  3.对象初始化器

  在C# 2.0中,开发者认为建立许多构造器来设定某个属性值为对象初始化过程。下面是一个例子: 类访问Customer方法:

Customer myCustomer = new Customer("Zach", "Smith");
共3页: 上一页 1 [2] [3] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:步入SWT/JFace世界,你还等什么  
下一篇:浮动菜单是如何作出来的mouse事件
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号