什么是委托推断,委托推断好像是C#2.0里面的东西,也就是VS2005版本的,可我现在开发用的是VS2003+framework1.0,没有委托推断。请问委托推断能用低版本里的什么替换吗?
谢谢大家,在线等。
谢谢大家,在线等。
解决方案 »
- 两个平台。。请高手们给解答,急急急~
- C#如何实现面板中用鼠标框选多个控件
- 用vs2008打开vs2005项目时报错,急啊,在线等
- 在BS下有OnInit,那么在CS下有什么呢?
- 两个问题.帮忙顶的5分.
- 请问如何把一个对象以字符串的形式输出。
- 困扰我3天的问题,超奇怪
- 父类方法操作子类实体属性值,困惑......
- 请问怎么用c#在一个acess数据库中建立一个access表,并且把一个已经赋值的变量的值写到这个access表的某一列中...谢谢....急用!!!!
- C#这种winform的控件联动怎么写?最好来个源码
- listbox传值问题,谢谢各位
- 快给fckeditor里集成公式编辑器搞疯掉了
在C# 2.0中,当新增或移除一个目标方法到委托列表的时候,编译器可以推断委托类型到相应的实例。除了显式实例化一个委托对象外,还可以直接声明一个方法命名到委托变量中,而不必先用一个委托对象来包装它。这被称为“委托推断”。
当声明一个方法命名到一个委托变量时,编译器首先推断委托的类型,然后编译器会验证是否存在该命名的方法以及是否与委托类型的方法签名相匹配。最后,编译器会创建一个推断的委托类型的实例对象来包装该方法,并声明到委托上。
委托推断一般与匿名方法一起使用。匿名方法
在C# 2.0中,我们不用声明委托方法也可以定义委托,即使用匿名方法。
用匿名方法定义委托的语法与普通的委托定义没有区别,但在实例化委托时有区别。
delegate(参数列表)
{
代码
}
参数:匿名方法可以在delegate关键字后面跟一个参数列表(也可以不指定),后面的代码块则可以访问这些参数。
返回值:如果委托方法里的返回值类型为void,匿名方法里便不能返回任何值;如果委托方法的返回值类型不为void,匿名方法里的返回值必须和委托方法的返回值兼容。
外部变量:一些局部方法和参数有可能被匿名方法所使用,其生存期会一直延长到委托实例不被引用为止。匿名方法可造成外部变量的值的变化。 匿名方法的优点是减少了要编写的代码。方法仅在由委托使用时才定义。这有助于降低代码的复杂性。
使用匿名方法时,必须遵循一下规则:
1. 匿名方法中的跳转语句不能跳到该匿名方法的外部,匿名方法外部的跳转语句不能跳到该匿名方法的内部。
2. 在匿名方法内部不能访问不安全的代码,也不能访问匿名方法外部使用的ref和out参数。
3. 如果需要用匿名方法多次编写同一个功能,就不要使用匿名方法,以提高代码执行速度。一个匿名委托的例子如下:
delegate int Operator(int x, int y);
Operator Add = delegate(int x, int y) { return x + y; };
Operator Minus = delegate(int x, int y) { return x - y; };
Operator Multiply = delegate(int x, int y) { return x * y; };
Operator Divide = delegate(int x, int y) { return x / y; };
Operator[] operators = { Add, Minus, Multiply, Divide };
for (int i = 0; i < operators.Length; i++)
{
Console.WriteLine("Value is {0}, {1}, result is {2}", 6, 3, operators[i](6, 3));
}