Probably the best approach would be to use a public property instead of a public variable. This way you can program in what you need in the accessors (get/set). In the set block, you can check if the assigned value is different than the current value, and then raise the event (i.e. call the event delegate) if it's different. When you do this, consider that you might want to set the new value before you actually make the delegate call so that consumers of the class instance will see the new value instead of the old.