1.匿名方法 在C#1.0中典型的给一个委托添加一个方法调用代码如下: 在C#2.0中引入了匿名方法,大大简化了上述操作 C#编译器对上述的定义自动隐式转化,只要匿名方法和委托的定义兼容. 符合参数和返回值兼容的就可以使用匿名方法 如果局部变量或参数的作用范围内包含匿名方法声明,则该局部变量或参数称为该匿名方法的外部变量或捕获变量 public void method1(bool enabled) 对于这个匿名方法来说:参数enabled和变量a是它的捕获变量或叫外部变量. 在C#1.0中若想要使得类型成为可枚举的类型(即象使用数组一样用foreach一样枚举数组中的成员),那么这个类中必须实现IEnumerable接口的GetEnumerator()方法返回IEnumerator 在C#2.0中引入了的新的语法扩充:迭代器,它能够很好的简单方便的让我们实现GetEnumerator()方法 假设类Class1中实现了上述的GetEnumertor方法 yield return产生迭代的下一个值,yield break说明迭代完成,用迭代器实现就是这么简单. 定义和使用命名迭代器 class Class1 // 定义一个命名的迭代器,并可以提供参数 // 定义一个迭代器类型的属性, public IEnumerable GetDescriptions() static void Main(string[] args) foreach (int i in c) foreach (int i in c.MaxToMin(1, 10)) foreach (int i in c.MinToMax) foreach (string s in c.GetDescriptions()) 4.不完整代码
private void ctrl_Click (object sender,EventArgs e)
txt.Click += new MyDelegate(ctrl_Click);
private ctrl_Click(object sender,EventArgs e)
{
Message.Show(…);
}
哪怕只有这么一条语句也必须得按上面的形式给事件的调用列表添加方法,还得创建一个委托的实例
可以改写为
txt.Click += delegate {Message.Show();}
或是这样:
txt.Click += ctrl_Click也是允许的.
符合下列条件可以兼容
1.参数兼容
如果匿名方法没有参数,委托中没有out参数
如果匿名方法和委托的参数在数量,类型,顺序上都一致
2.返回值兼容
如果委托没有返回值,匿名方法中也没有返回值或匿名方法中只有return不带返回值
如果两者都有返回值,并且匿名方法的返回值可以隐式转化为委托定义的类型
匿名方法的捕获变量(capture variable)
{
string b;
this.txt.Click += delegate
{
this.txt.enabled = enabled;
this.txt.Text = b;
}
}
捕获变量的生命周期直到此匿名方法的资源被回收而结束
2.泛型
关于泛型的定义及如何使用网上资料已经很多,请参见MSDN
3.迭代器(iterators)
public IEnumerator GetEnumerator()
{..}
一般来说实现GetEnumerator是不容易的.
如:
public IEnumerator GetEnumerator()
{
for ( int i = 0; i < 10; i ++)
{
yield return i;
}
}
那我们就可以用foreach对类Class1进行枚举
Class1 c = new Class1;
foreach ( int i in c)
{
Console.WriteLine(i);
}
{
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; }
}
{
yield return “this is my test”;
yield return “class name is class1”;
yield return “ktgu”;
}
}
{
Class1 c = new Class1();
{
Console.WriteLine(i);
}
{
Console.WriteLine(i);
}
{
Console.WriteLine(i);
}
{
Console.WriteLine(s);
}
}
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#2.0新的语法扩充(泛型,迭代器,匿名方法) _c#应用
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » c#2.0新的语法扩充(泛型,迭代器,匿名方法) _c#应用
相关推荐
-      利用c#远程存取access数据库_c#应用
-      c# 3.0新特性系列:隐含类型var_c#教程
-      c#动态生成树型结构的web程序设计_c#应用
-      论c#变得越来越臃肿是不可避免的_c#应用
-      用c#监控并显示cpu状态信息_c#应用
-      c#中实现vb中的createobject方法_c#应用
-      photoshop给花瓶打造彩绘效果_photoshop教程
-      使用c#创建sql server的存储过程_c#应用