In both Ruby and PHP (and I guess other languages as well) there are some utility methods that are called whenever a property is set. ( *instance_variable_set* for Ruby, *__set* for PHP).
So, let's say I have a C# class like this:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Now, let's say that if any property setter from the Person
class is called, I want to call another method first, and then continue with the default behaviour of the setter, and the same applies for the property setters.
Is this possible?
Edit: I want to do this without defining a backing field.
Not out of the box. You would need to insert code into each properties setter and getter, either manually or automatically using IL rewriting.
When you want to do it manually, you can't use automatic properties any more.
When you want to do it automatically, have a look at AOP.
Not generally; a few options though;
Are you in a position to rewrite your class to implement an interface? If so, Unity's interface interceptor might give you what you need. If an interface is not an option then that link also documents Unity's type and instance interceptors.
As far as I know, you have to use a backing field and put the call to the other method inside the setter thusly:
It is possible to do directly in the property body itself, but then you need to use a proper backing field instead of auto-implemented properties.
Even with auto-implemented properties you get a backing field - this is generated by the compiler and you don't have direct access to it.
Edit:
Seeing as you don't want a backing field, you have other options - using an AOP tool such as PostSharp could help with that.