0
点赞
收藏
分享

微信扫一扫

【Unity项目实践】委托

什么是委托?

函数指针的升级版,间接实现

数据和算法本质上都是地址

直接调用:通过函数的名字进行调用,直接获得函数所在地址并开始执行

间接实现:通过读取函数指针存储的函数所在地址并开始执行

Java不允许直接访问地址

Action和Func都是委托的一种


Action委托

Action是返回值和参数列表都为空的,只有符合这个条件的才可以用Action

Action action = new Action(calculator.Report);//这里只需要方法名,不需要在后面加圆括号
calculator.Report();//直接调用
action.Invoke();//间接调用
action();//间接调用的简写版


Func委托

泛型委托Func<>

尖括号中写参数类型和返回值类型

Func<int, int, int> func1= new Func<int, int, int>(calculator.Add);
Func<int, int, int> func2= new Func<int, int, int>(calculator.Sub);

int x=100;
int y=200;

int z=0;
z = func1.Invoke(x, y);
z = func1(x, y);//间接调用的简写版本


声明委托

委托是一种类,类一种引用类型的数据类型。

声明格式:

和类层级平行

//声明ming
public delegate double Calc(double x, double y);//类型约束

//实例化
Calc calc1= new Calc(calculator.Add);//实例化的时候括号中填写方法名,其中的方法需要和声明的委托中的一致

//调用
c= calc1.Invoke();
c= calc1;


委托和封装的方法必须类型兼容,也就是返回值类型和参数列表一致


数据model和表现层分开

用property来写数据model

public static calss CounterModel{
private static int mCount =0;
public static Action<int> OnCountChanged;

public static int Count{
get {return mCount;}
set { if (value != mCount){mCount = value;}}
}
}


举报

相关推荐

0 条评论