Add code to C# get/set of property without needing backing field?

ashley picture ashley · Jul 24, 2013 · Viewed 11.3k times · Source

You know how you can have a property that automatically generates a backing field? Like if I go:

public String SomeProperty {get; set;}

I know that if I want to add code to that property I have to create the backing field as so:

 public string someProperty = string.Empty;
 public string SomeProperty
 {
     get { return someProperty; }
     set
     {
         someProperty = value;
         DoSomething();
     }
 }

Basically, what I want to know is... is there any way to do this but without having to create the backing field? For example I could use it to trigger some kind of event that occurs when a property is set. I'm looking for something like this:

 public string SomeProperty
 {
     get;
     set { this.OnSomeEvent; }
 }

But I know that'll cause a compile error because get needs do declare a body if set does.

I've researched and I cant find anything, but I thought I'd check to see if anyone knew.

I guess what I'm really after is some way to trigger an event when a property is changed but without having to add all that extra clutter. Any suggestions?

Answer

Claies picture Claies · Jul 24, 2013

Simple answer is no, you can't have it both ways. From .NET Docs:

In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors.