科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual C#2005抢先预览

Visual C#2005抢先预览

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文是在产品发行前编写的,因此无法保证内文细节与实际产品完全相符

作者:PETERY编译 出 来源:MSDN 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
匿名方法

  匿名方法可视为将代码块作为参数来传递的功能。一般而言,匿名方法可以在期望使用委托的任何地方被替换。以下为最简单的例 子:

button1.Click += delegate { MessageBox.Show("Click"); };

  在此需要注意一些事项。首先,以内联方式编写方法是合法的。其次,返回类型或方法参数都没有描述。第三,delegate 关键字被用来位移此结构。在此并未列出返回类型,因为编译器会自行“推断”。 亦即编译器已知预期的项目(EventHandler),因此将检查所定义的匿名方法是否可被转换成该方法。

  在先前的例子中,您可能会发现并未列出参数。 这是因为代码块中并不需要这些参数。若要使用这些参数,声明将如下所示:

button1.Click += delegate(object sender, EventArgs e)
{
 MessageBox.Show(sender.ToString());
};

  请注意,必须指定类型与参数名称。

  Iterator

  Iterator 类似于 C# 中的 foreach 语句,可简化集合里的重复 (iterate) 过程。目前,使用 foreach 关键字可轻易地在集合内进行重复。不过,编写使用 foreach 的集合,必须实现 IEnumerable 与 IEnumerator 接口,并且分别建立 Enumerator 类/结构。Iterator 可减轻这类例行代码的工作负担,并可让框架开发人员轻易地公开可列举的集合。例如:

class List: IEnumerable
{
 private T[] elements;
 public IEnumerator GetEnumerator()
 {
  foreach (T element in elements)
  {
   yield element;
  }
 }
}

  上面代码使用了一个新的关键字 yield。yield 仅可用于返回 IEnumerator、IEnumerable 或其它泛指对等类型的方法。Iterator 也可以参数的形式来命名与传递,不过,在大部份 情况下,命名的 iterator 将返回 IEnumerable,而非 IEnumerator。例如:

class List
{
 private T[ ] elements;
 public IEnumerable Range(int from, int to)
 {
  while (from < to) yield elements[from++];
 }
}

  别名限定词 (全局命名空间限定词)

  代码产生器目前所面临的问题之一是如何确保不要干扰用户所编写的代码,或 Visual Studio 等代码产生工具所建立的代码。一般建议代码产生器尽可能严格使用合格的类型。若要在 C# 中严格使用合格的类型将面临一个问题,也就是无法在根命名空间搜寻类型。为了解决此问题, 全局命名空间限定词引入了“::”运算符,作为命名空间或类型名称前置词。如此,开发人员能在代码中以明确的方式 引用根命名空间,如下所示。

namespace Acme
{
 namespace System
 {
  class Example
  {
   static void Main()
   {
    // In Visual Studio 2003, looking up
    // System.Console.WriteLine would have
    // started in the Acme.System namespace.
    ::System.Console.WriteLine("Hello");
   }
  }
 }
}

  静态类

  静态类具有仅含静态方法的私有构造函数,可用来取代建立密封类(sealed class)的设计模式。将静态修饰词(static)置于类声明中,便可 表示静态类。例如:

public sealed class Environment
{
// Keep class from being created
private Environment() { }
}

  现在可用下列方式编写:

public static sealed class Environment
{
...
}

  利用静态类取代上述设计模式的优点,在于如果不慎声明“实例方法”,编译器可报告错误。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章