匿名方法
定义:没有名字的方法称为匿名方法。
void Start
{
Action test = delegate()
{
..........
}
}
这样就生成了一个匿名方法,直接调用test()就可以执行这个方法。
如果带有参数就直接传入参数就行,Action委托的用法在之前的文章有提到。
event事件
定义:本质是委托,但是只能作为类的成员,无法被外部访问。(定义委托)
如:
public event Action test;(注意定义的时候不能放在函数内部,比如start等等函数里面)
public Action test1;
void Start
{
}
如果在一个类的外面(假设上面的函数在MyClass类里面)
public class MyClass1
{
public MyClass myclass=new MyClass()(实例化)
void Start
{
test += Test1;(在外部类里面必须+=才能赋值,不能直接=)
test1=Test1;(普通的委托在外部可以直接=赋值)
}
public void Test1()
{
...........
}
}
如果是delegate委托
public delegate void Test();
event Test test;
void Start
{
test = Test1;
}
public void Test1()
{
...........
}
多播委托
定义:指的是赋予一个委托多个方法,并且是使用+=和-=来添加和撤销方法。
多播委托的实现特别简单。
现在用Action委托来举例子。
void Start
{
Action test = Test1;
test+=Test2;(这样就把Test2添加进去了)
test-=Test1;(这样就把Test1移除掉了)
}
public void Test1()
{
...........
}
public void Test2()
{
...........
}
注意,委托所以引用类型,默认值是null,如果里面什么都没有,那么就会报空异常。
比如:
void Start
{
Action test = Test1;
test+=Test2;(这样就把Test2添加进去了)
test-=Test1;(这样就把Test1移除掉了)
test-=Test2;(现在移除了里面的两个方法)
test();(调用这个函数,报空)
}
public void Test1()
{
...........
}
public void Test2()
{
...........
}
所以一般在使用时,一般要加上:
if(test!=null)
{
test();
}