So what I'm trying to do is call a single propertyWasSet() function when any property within a C# class is set (conversely, propertyWasGot() when it is get). I would also like to know which property's 'get' was invoked.
I would like to maintain a dictonary of properties that are 'set', and check upon the 'get' action if they have been set yet (and throw an error if it hasn't been).
I've be looking through msdn documentation for reflection, delegates, etc..., but I'm not entirely sure this is possible.
Is there a way to do this? or fire an event upon calling one of these functions that can be intercepted in a base class or something?
I wrote an interceptor the other week for Set which can easily be extended for Get, it uses RealProxy, which means your base class needs to derive off MarshalByRefObject.
Another fancy option is to have your class abstract, and use Reflection Emit to construct a concrete class that wraps up all the properties.
Also you could look at code generators to get around this or PostSharp...
Performance for this solution is not stellar, but it should be plenty fast for most UI binding. It could be improved by generating LCG methods for proxy invocation.
Usage:
There's nothing like this if you don't create it yourself.
I think what you need is very similar to WPF dependency property system. You might want to look at its implementation. Anyhow, you can add the intercepting code to getter and setter of each property too.
The SET part of your request is very similar to WPF dependency property system. But the GET part is such unusual that is missing even in the WPF dependency property system!
You may want to look into PostSharp for this sort of task. It is designed to run on top of C# (or any .NET language for that matter) and has the benefit of not cluttering up your code with reflection in addition. In fact, I don't believe you could find a solution that purely uses C#/Reflection without manually adding code to each of your properties, so I would definitely recommend PostSharp as the way to go.