The event mechanism of the C # is based on the delegate implementation. Implement an event, first define a delegate type class1 {public delegate void mydelegate (MyEventargs e); public event mydelegate event1;} then we can use = and - = registration, remove event class1.event1 = new mydenLegate MyEventArgs (); "Event1! = NULL) Event1 ();}} If you don't want to declare your entrustment type, you can use System.EventHandler's commission. Type Public Delegate Void EventHandler (Object Sender, Eventargs E); where Eventargs are transferred to additional parameters. It is best to implement your own Eventargs Class MyEventArgs: Eventargs {} class name is preferably ending with Eventargs. If you don't want to use parameters, if you don't want to use parameters, you can pass a lot of work, automatically generate a commission instance, one Register the ADD_XXX method of the entrusted, a REMOVE_XXX method that is delegated. In fact, these two methods can be customized. Use the following syntax as long as the event is declared: public evenet mydlegate1 event1 {add {} remove {}} can implement its own registration function. It seems that it is very similar to the definition of the property :)