委托的多种写法

一、委托调用方式

1. 最原始版本:

delegate string PlusStringHandle(string x, string y);

class Program

{

static void Main(string[] args)

{

PlusStringHandle pHandle = new PlusStringHandle(plusString);

Console.WriteLine(pHandle("abc", "edf"));

Console.Read();

}

static string plusString(string x, string y)

{

return x + y;

}

}

 2. 原始匿名函数版:去掉“plusString”方法,改为

PlusStringHandle pHandle = new PlusStringHandle(delegate(string x, string y)

{

return x + y;

});

Console.WriteLine(pHandle("abc", "edf"));

3. 使用LambdaC#3.0+),继续去掉“plusString”方法(以下代码均不再需要该方法)

PlusStringHandle pHandle = (string x, string y) =>

{

return x + y;

};

Console.WriteLine(pHandle("abc", "edf"));

还有更甚的写法(省去参数类型)

PlusStringHandle pHandle = (x, y) =>

{

return x + y;

};

Console.WriteLine(pHandle("abc", "edf"));

如果只有一个参数

delegate void WriteStringHandle(string str);

static void Main(string[] args)

{

//如果只有一个参数

WriteStringHandle handle = p => Console.WriteLine(p);

handle("lisi");

Console.Read();

}

二、委托声明方式

1. 原始声明方式见上述Demo

2. 直接使用.NET Framework定义好的泛型委托 Func Action ,从而省却每次都进行的委托声明。

static void Main(string[] args)

{

WritePrint<int>(p => Console.WriteLine("{0}是一个整数", p), 10);

Console.Read();

}

static void WritePrint<T>(Action<T> action, T t)

{

Console.WriteLine("类型为:{0},值为:{1}", t.GetType(), t);

action(t);

}

3. 再加上个扩展方法,就能搞成所谓的链式编程啦。

class Program

{

static void Main(string[] args)

{

string str = "所有童鞋:".plusString(p => p = p + " girl: lisi、lili\r\n").plusString(p => p + "boy: wangwu") ;

Console.WriteLine(str);

Console.Read();

}

}

static class Extentions

{

public static string plusString<TParam>(this TParam source, Func<TParam, string> func)

{

Console.WriteLine("字符串相加前原值为:{0}。。。。。。", source);

return func(source);

}

}

看这个代码是不是和我们平时写的"list.Where(p => p.Age > 18)"很像呢?没错Where等方法就是使用类似的方式来实现的。

时间: 2024-10-12 15:14:43

委托的多种写法的相关文章

C# 委托及各种写法

委托是嘛? 委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法).通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法. 如何使用委托? 1.定义委托类型 [访问修饰符]delegate 返回类型 委托名(形参): 2.声明委托对象 委托名 委托实例名: 3.创建委托对象(确定与哪些方法进行绑定) 委托实例名=new 委托名(某个类的方法) 4.使用委托调用方法 委托实例名(实参) 委托注意

【WebFrontEnd】布局的多种写法

第一次写文章,巧紧张!!! 这是一个很简单的布局,不过是个值得深思的问题.对于这种布局,可以有多种HTML.CSS写法,那么到底可以有多少种写法呢? 我的思路是根据HTML的不同布局,写不同的CSS.这里为了效果,所以都给元素添加了固定的高度. 1.第一种HTML布局 1-1.第一种CSS布局: 这种写法是一个清除了浮动的父元素含有两个向左浮动的子元素,子元素各设置了宽度. 这种写法的缺点是不够灵活,父元素和子元素还有边距都是固定写死的, 如果父元素container宽度改变,aside宽度不变

Delegate 多种写法总结

委托是嘛? 委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法).通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法. 如何使用委托? 1.定义委托类型 [访问修饰符]delegate 返回类型 委托名(形参): 2.声明委托对象 委托名 委托实例名: 3.创建委托对象(确定与哪些方法进行绑定) 委托实例名=new 委托名(某个类的方法) 4.使用委托调用方法 委托实例名(实参) 委托注意

JavaScript中匿名函数的多种写法

匿名函数没有实际名字,也没有指针,怎么执行滴?  其实大家可以看看小括号的意义就应该可以理解.小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,不难理解 (function(){})()可以将没有名字的函数执行了把- 关于匿名函数写法,很发散~ 最常见的用法: 代码如下: (function() { alert('water'); })(); 当然也可以带参数: 代码如下: (function(o) { alert(o); })('

[js高手之路]立即表达式的多种写法与注意点以及in操作符的作用

立即表达式,在javascript中非常常见, 采用立即表达式可以形成一个局部作用域, 常配合闭包实现模块化编程等其他用途,接下来我们看看,在大多数的框架中,立即表达式都有哪些写法,以及需要注意的点,另外再介绍下in操作符的用法 一.通过小括号把函数声明变成表达式, 然后再外面加个小括号 就可以达到立即调用的效果 1         (function(){ 2             console.log( 'ghostwu' ); 3         })(); 二.!号 把函数声明转化成

Python中if-else的多种写法

a, b= 1, 2 将a和b两个变量中的最大值赋值给c (1)常规写法 if a>b: c = a else: c = b (2)表达式 c = a if a>b else b (3)二维列表 c = [b,a][a>b] (4)逻辑赋值 c = (a>b and [a] or [b])[0] 分析: 1.2为程序的基本语法不讨论 3:首先a>b的取值为True或False,而在python中True的默认值为1False的默认值为0. 可得c = [b, a][1]或[b

C#交换两个变量值的多种写法

在学习.Net/C#或者任何一门面向对象语言的初期,大家都写过交换两个变量值,通常是通过临时变量来实现.本篇使用多种方式实现两个变量值的交换. 假设int x =1; int y = 2;现在交换两个变量的值. 使用临时变量实现 static void Main(string[] args) { int x = 1; int y = 2; Console.WriteLine("x={0},y={1}",x, y); int temp = x; x = y; y = temp; Cons

Mono for android,Xamarin点击事件的多种写法

(一)原本java的写法(相信很多是学过java的): 需要实现接口View.IOnClickListener,最好也继承类:Activity,因为View.IOnClickListener接口又继承了IJavaObject, IDisposable接口,所以还学要实现这两个接口里面的成员,而Activity已经实现可了这两个接口的成员,就不需要我们再写了,毕竟我们大部分只想重写View.IOnClickListener里面的OnClick函数.(如果自定义的类只是实现了View.IOnClic

TSQL order by 子句中排序列的多种写法

Order by 子句用于对结果进行排序,执行顺序位于select子句之后,排序列有4中写法: column_name column_alias,由于order by子句的执行顺序位于select子句之后,因此,可以使用列的别名: nonnegative integer,用于表示select子句中column的位置,位置从1开始: Column Expression 也可以指定多列排序,每一列只能出现一次,排序的规则是先按照第一列排序,其次按照第二排序,然后按照第三列等排序,依次类推. 1,创建