Search code examples
c#interceptorgetter-setter

Is there a way to intercept setters and getters in C#?


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.


Solution

  • Not generally; a few options though;

    • inherit from ContextBoundObject - which does allow this, but at a performance cost
    • write an explicit property (i.e. with a backing field), and add a utility method call manually
    • look at compile-time weavers, such as PostSharp - generally by spotting an attribute or similar
    • look at runtime code generators, as offered by some DI/IoC tools (and some other "decorator" based tools) - which either decorate or subclass your object to add the extra code