typedef ManyOperation(int firstNo , int secondNo);
//function signature
Add(int firstNo,int second){
print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
print("Divide result is ${firstNo/second}");
}
Calculator(int a, int b, ManyOperation oper){
print("Inside calculator");
oper(a,b);
}
void main(){
ManyOperation oper = Add;
oper(10,20);
oper = Subtract;
oper(30,20);
oper = Divide;
oper(50,5);
}
如果 typedef 变量尝试指向具有不同函数签名的函数,则上述代码将导致错误。
typedef Fly = void Function(int value);
void main(){
Bird bird = Bird((int a){print(a);});//如果实参函数的类型不是该类型的话 编译不通过
bird.fly(3);
}
/// (int a){print(a);} 签名和 void Function(int value) 相同
class Bird{
Fly fly;//类型是Fly 一个只有一个整形参数的函数
Bird(this.fly);
}
typedef OnSuccessList<T>(List<T> banners);
typedef OnSuccess<T>(T banners);
typedef OnFail(String message);