当前位置:首页>网络学院>程序开发>ASP.NET教程>文章内容

asp.net 2.0教程 C# 2.0匿名方法、迭代器、局部类

[ 来源:http://www.it55.com | 作者: | 时间:2007-10-08 | 收藏 | 推荐 ] 【

尊重作者,请保留 www.it55.com 链接字样。 免费矢量图片素材下载http://www.it55.com

    这一节我们继续一起学习C# 2.0的新特性 匿名方法、迭代器、局部类。
    这些新特性可以说是C# 2.0的精华部分之一,利用这些新特性可以很大程度上降低代码重复率和减少代码编写量。
    刚才谁扔鸡蛋来着?不就刚刚说了两句废话吗?用得着这样对我吗?好,不说废话,咱们一起开始吧!
1、匿名方法
    上节我们讲过委托的用法,大家会感到很麻烦。先是创建一个静态的类或方法,然后声明一个委托并构造。
匿名方法的到来,让大家为之兴奋。先来看个简单的例子:

免费设计素材下载http://www.it55.com

Button bt;
public void test()
{
  bt.Click += delegate {MessageBox.Show("你点击了按钮!");};
}
如果用委托实现就需要这么做:

免费矢量图片素材下载http://www.it55.com

Button bt;
public void test()
{
  bt.Click += new EventHandler(AddClick);//EventHandler其实就是系统类库中的一个委托。
}
.....
void AddClick(object sender, EventArgs e)
{
  MessageBox.Show("你点击了按钮!");
}

免费网页模版下载http://www.it55.com

上面是一个不带参数的匿名方法,如果用带参数的也可以这样实现(要求参数数量和类型要一致): 45398 http://www.it55.com it55学习IT知识,享受IT生活 4dfkjn

bt.Click += delegate(object obj, EventArgs er) { MessageBox.Show("你点击了按钮!"); };

http://www.it55.com

    匿名方法允许将一段委托关联的代码以代码块的方式内嵌到使用委托的地方,可以省略委托的方法的构造过程。
另外,匿名方法能够共享对本地函数成员的访问:

45398 http://www.it55.com it55学习IT知识,享受IT生活 4dfkjn

class Test
{
   delegate void D();
   static void Main()
   {
     bool flag = false;
     D d = delegate{
           if(flag)//读取本地成员flag
              Console.WriteLine("True");
           else
              flag = true;//改写本地成员flag
        };
   }
}

免费网页模版下载http://www.it55.com

2、迭代器
    为了解释c# 2.0中的迭代器,我们需要先认识一下以下framework中的接口类:

http://www.it55.com在线教程

(1)聚合型System.Collections.IEnumerable
(将System.Collections.IEnumerator作为子类建立) 精美商业网页模版下载http://www.it55.com

public  System.Collections.IEnumerator GetEnumerator()
利用IEnumerable可以产生有序的聚合型对象集合。

vd;k;l http://www.it55.com rdfg

(2)枚举型,作用:对聚合型对象集合进行枚举。
 System.Collections.IEnumerator
方法:
public object Current
public void Reset()
public bool MoveNext()

45398 http://www.it55.com it55学习IT知识,享受IT生活 4dfkjn

    下面我们来说说C# 2.0中的迭代器。使用迭代器,我们能够在不实现IEnumerable接口或者IEnumerator接口成员的条件下很方便的实现类、结构体的枚举。
来看一个例子: http://www.it55.com在线教程

//创建方法
    public class Test  : System.Collections.IEnumerable
    {
        string[] v = { "a", "b", "c", "d", "e", "f", "g" };//当然,这里也可以是某个类的实体列表
        public static System.Collections.IEnumerator GetEnumerator()
        {
            for (int i = 0; i < v.Length; i++)
            {
                yield return v[i];
            }
        }
    }
//第一种应用方法
            while (Test.GetEnumerator().MoveNext())

vd;k;l http://www.it55.com rdfg


            {
              string obj = (string)ee.Current;
                System.Console.WriteLine(obj);
            }
//第二种方法:隐式使用
            foreach (string obj1 in Test.GetEnumerator())
            {
                System.Console.WriteLine(obj1);
            }
以上程序输出结果(两种应用方法结果相同):
a
b
c
d
e
f
g http://www.it55.com在线教程

3、局部类
    在C# 1.X中,我们只允许一个类的内容只能存在在一个文件中,但是如果代码冗长将给我们的阅读和维护工作带来不便。
    局部类允许将类、结构、接口的内容分成小块存放于多个文件中,这样不仅避免了上述问题,而且我们还可以在不破坏类的原始完整性的基础上为它添加新的功能或者改善其方法属性。

(编辑:IT资讯之家 www.it55.com

返回顶部
共2页: 上一页 1 [2] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]