I have a base class that contains the following events:
public event EventHandler Loading;
public event EventHandler Finished;
In a class that inherits from this base class I try to raise the event:
this.Loading(this, new EventHandler()); // All we care about is which object is loading.
I receive the following error:
The event 'BaseClass.Loading' can only appear on the left hand side of += or -= (BaseClass')
I am assuming I cannot access these events the same as other inherited members?
You can only access an event in the declaring class, as .NET creates private instance variables behind the scenes that actually hold the delegate. Doing this..
is actually doing this;
and doing this...
is actually this...
So you can (obviously) only access the private delegate instance variable from within the declaring class.
The convention is to provide something like this in the declaring class..
You can then call
OnMyPropertyChanged(EventArgs.Empty)
from anywhere in that class or below the inheritance heirarchy to invoke the event.You can try this way, It works for me:
not to resurrect an old thread but in case anybody is looking, what I did was
This lets you inherit the event in a derived class so you can invoke it without requiring to wrap the method while keeping the += syntax. I guess you could still do that with the wrapping methods if you did
Precisely. It's customary to provide a protected function
OnXyz
orRaiseXyz
for each event in the base class to enable raising from inherited classes. For example:Called in the inherited class:
What you have to do , is this:
In your base class (where you have declared the events), create protected methods which can be used to raise the events:
(Note that you should probably change those methods, in order to check whether you have to Invoke the eventhandler or not).
Then, in classes that inherit from this base class, you can just call the OnFinished or OnLoading methods to raise the events: