注意:防止静态事件注册多个方法,这样会执行很多次实例中的函数
namespace System
{
//
// 摘要:
// 封装一个方法,该方法只有一个参数并且不返回值。
//
// 参数:
// obj:
// 此委托封装的方法的参数。
//
// 类型参数:
// T:
// 此委托封装的方法的参数类型。此类型参数是逆变。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息,请参见泛型中的协变和逆变。
public delegate void Action<in T>(T obj);
}
//上面是自带封装好的Action,除其他重载的外这个参数形式是固定的
//使用实例时必须要有参数
Action<object> actionEvent = null;
actionEvent += new Action<object>((object ob) => { int res = 0; });
actionEvent(new object());
无参数的话会报错如下
//可以这样改造
//类主体中声明
delegate void myDelegate<T>(); //方法中定义
myDelegate<object> actionEvent = new myDelegate<object>(() => { int res = 0; });
actionEvent();
这样就可以使用一个带T泛型但无参数的泛型委托了,类似与Action<T>的封装但是可以不带T类型的参数调用