C# 委托,Lambda表达式 and Swift 委托,闭包

来源:互联网 发布:51cto数据库.zip 编辑:程序博客网 时间:2024/05/22 00:06

C#委托

是指向方法的类型。

委托声明

在无方法体的方法前添加关键字delegate。

delegate int del(int x, int y);

委托调用

用方法名称实例化委托,赋值给一个委托类型的变量,然后将变量当作全局方法调用。

del obj = new del(delFunc);Console.WriteLine(obj(10, 10));   // print 100

Swift委托

一般指向协议的变量或常量。

委托声明

protocol DiceGameDelegate {    func game()}class Game {    var delegate: DiceGameDelegate?    fun play(){         delegate?.game()    }}class DiceGameTracker: DiceGameDelegate {    func game() {        println("game play")    }}

委托调用

直接调用协议的属性和方法。

let tracker = DiceGameTracker()let game = Game()game.delegate = trackergame.play()  // print game play

C# Lambda表达式

用于创建委托类型的匿名函数

delegate int del(int x, int y);void calc(del obj){    Console.WriteLine(obj(10, 10));   }static void Main(string[] args){    // 调用方法,传递参数为Lambda表达式    calc((x, y) => { return x * y; });     //   print 100}

仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 括号内的两个或更多输入参数使用逗号加以分隔:

(x, y) => x * y

有时,编译器难以或无法推断输入类型。 如果出现这种情况,你可以按以下示例中所示方式显式指定类型:

(int x, int y) => x * y

使用空括号指定零个输入参数:

() => Console.WriteLine("void");

Swift 闭包

函数代码块,可以在代码中被传递和使用

func calc(closure:(Int, Int) -> Int){    println(closure(10,10))}// 调用方法,传递参数为闭包calc({    (x, y) -> Int in return x * y})// print 100

有时,编译器难以或无法推断输入类型。 如果出现这种情况,你可以按以下示例中所示方式显式指定类型:

(Int x, Int y) -> Int in x * y

使用空括号指定零个输入参数,使用Void表示无返回值:

() -> Void in println("void")
0 0