委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。event关键字的作用,为了限制委托的调用条件,使之只能在外部进行-=、+=操作不能调用,但可以能在类内部调用。
为了能够在在C++模拟event关键字中定义是指定事件处理函数的原型,我使用了template,为了能和C#一样用+=和-=来定制和撤消事件,我重载了这两个操作符(C#不支持操作符重载),为了能像C#一样直接把event当做函数调用,我有重载了Handler自定义转换操作符,可惜的是,这一点模拟得不是很像,在调用时还必须来一次强制转换...
而event关键字可以封装一个事件,一个事件的绑定的触发形式就是一个函数指针。
那么我可以加一个event来修饰,这样虽然是public,但是外部无法触发委托,只能类的内部触发。