Unity3D中使用委托

首先来了解委托是什么,在《Unity3D脚本编程》一书中,指明委托要确定一个回调方法签名,包括参数以及返回类型等。在下面的例子中,MyDelegate委托定制的回调方法的参数类型是int型,同时返回类型为void。

//声明一个委托类型,它的实例引用一个方法
internal delegate void MyDelegate(int num);

在为委托实例引用方法时,C#允许引用类型的协变性和逆变性。协变性是指方法的返回类型可以是从委托的返回类型派生的一个派生类,逆变性则是指方法获取的参数的类型可以是委托的参数的类型的基类。

// 声明一个委托类型
delegate Object TellMeYourName(SoldierClass soldier);

// 实例化一个方法,该方法的返回值是委托的返回类型派生的一个派生类
string TellMeYourNameMethod(BaseUnitClass base);

// 注意,这里该方法不能被绑定到委托实例上,编译器会报错。
// 这是因为虽然int型和string型一样,都派生自Object类,但是int型是值类型,因此是不支持协变性的。
int TellMeYourNameMethod(BaseUnitClass base);
隐藏边栏