网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C#应用
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.C#代表元及事件触发.
.远程注册表读取,与多线程池的应用.
.根据html页面模板动态生成html页.
.C#实现WEB服务器.
.用C#生成中文汉字验证码的基本原.
.C#中使用存储过程中的返回值.
.使用C#编写一个计时器.
.在Excel中将连续多列相同数据项合.
.利用C#进行AutoCAD的二次开发(二.
.C#中常用到的JS.
.C#图像处理之-给你的图片打上LOGO.
.C#3.0 中使用扩展方法来扩展接口.
.用C#访问ACCESS数据库问题.
.列出C#进程以及详细信息.
.选择 VB.NET 还是 C# ? .
.关于C#中timer类 在C#里关于定时.
.C#中如何读写INI文件.
.防SQL注入攻击.
.C#位图处理指针问题.
.C#中调用Windows API的要点.

C#2.0新的语法扩充(泛型,迭代器,匿名方法)

发表日期:2006-11-30


1.匿名方法

在C#1.0中典型的给一个委托添加一个方法调用代码如下:
private void ctrl_Click (object sender,EventArgs e)
txt.Click += new MyDelegate(ctrl_Click);
private ctrl_Click(object sender,EventArgs e)
{
 Message.Show(...);
}
哪怕只有这么一条语句也必须得按上面的形式给事件的调用列表添加方法,还得创建一个委托的实例

在C#2.0中引入了匿名方法,大大简化了上述操作
可以改写为
txt.Click += delegate {Message.Show();}
或是这样:
txt.Click += ctrl_Click也是允许的.

C#编译器对上述的定义自动隐式转化,只要匿名方法和委托的定义兼容.
符合下列条件可以兼容
1.参数兼容
如果匿名方法没有参数,委托中没有out参数
如果匿名方法和委托的参数在数量,类型,顺序上都一致
2.返回值兼容
如果委托没有返回值,匿名方法中也没有返回值或匿名方法中只有return不带返回值
如果两者都有返回值,并且匿名方法的返回值可以隐式转化为委托定义的类型

符合参数和返回值兼容的就可以使用匿名方法


匿名方法的捕获变量(capture variable)

如果局部变量或参数的作用范围内包含匿名方法声明,则该局部变量或参数称为该匿名方法的外部变量或捕获变量

public void method1(bool enabled)
{
 string b;
 this.txt.Click += delegate
 {
  this.txt.enabled = enabled;
  this.txt.Text = b;
 }
}

对于这个匿名方法来说:参数enabled和变量a是它的捕获变量或叫外部变量.
捕获变量的生命周期直到此匿名方法的资源被回收而结束


2.泛型
关于泛型的定义及如何使用网上资料已经很多,请参见MSDN


3.迭代器(iterators)

在C#1.0中若想要使得类型成为可枚举的类型(即象使用数组一样用foreach一样枚举数组中的成员),那么这个类中必须实现IEnumerable接口的GetEnumerator()方法返回IEnumerator
public IEnumerator GetEnumerator()
{..}
一般来说实现GetEnumerator是不容易的.

在C#2.0中引入了的新的语法扩充:迭代器,它能够很好的简单方便的让我们实现GetEnumerator()方法
如:
public IEnumerator GetEnumerator()
{
 for ( int i = 0; i < 10; i ++)
 {
  yield return i;
 }
}

假设类Class1中实现了上述的GetEnumertor方法
那我们就可以用foreach对类Class1进行枚举
Class1 c = new Class1;
foreach ( int i in c)
{
 Console.WriteLine(i);
}

yield return产生迭代的下一个值,yield break说明迭代完成,用迭代器实现就是这么简单.

定义和使用命名迭代器

     class Class1
    {
        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < 10; i++)
            {
                yield return i;
            }
        }

        // 定义一个命名的迭代器,并可以提供参数
        public IEnumerable MaxToMin(int min, int max)
        {
            for (int i = max; i >= min; i--)
            {
                yield return i;
            }
        }

        // 定义一个迭代器类型的属性,
        public IEnumerable MinToMax
        {
            // this表示该类实例,因为该类实现了GetEnumerator(),它是可枚举的
            get { yield return this; }
        }

        public IEnumerable GetDescriptions()
        {
            yield return "this is my test";
            yield return "class name is class1";
            yield return "ktgu";
        }
    }

         static void Main(string[] args)
        {
           
            Class1 c = new Class1();

            foreach (int i in c)
            {
                Console.WriteLine(i);
            }

            foreach (int i in c.MaxToMin(1, 10))
            {
                Console.WriteLine(i);
            }

            foreach (int i in c.MinToMax)
            {
                Console.WriteLine(i);
            }

            foreach (string s in c.GetDescriptions())
            {
                Console.WriteLine(s);
            }
      }

4.不完整代码
C#2.0中引入了一个"不全代码"的概念,即你可以将一个类的定义放在别的文件中.这样给大项目,大文件的维护带来方便.
声明:
[modifiers] partial type
modifier: [public/private/protected/internal] abstract new override static virtual extern
type:类/结构/接口


以上主要是偏向于介绍如何快速的应用这些新的语法点,详细概念及要领请参见MSDN
http://www.cnblogs.com/ktgu/archive/2006/11/29/576368.html

上一篇:对C#委托及事件委托的理解 人气:6376
下一篇:Visual c#的Excle编程 人气:5787
浏览全部C# 2.0的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐