It may look like an abstract property or a property from an interface but it is far from it. In order to encourage developers to use properties (as they are a best-practice for many reasons) Microsoft decided to include this feature in C# 3 to allow you to declare properties with greater ease.
Here is the standard way of creating a property:
String foo;
public String Foo
{
get { return this.foo }
set { this.foo = value; }
}
Now this requires quite a bit of typing and as developers are lazy to the core sometimes we are tempted to create public fields just to save some time.
Now with the C# 3 compiler we can do this:
public String Foo { get; set; }
While this looks a bit strange, consider the work that the compiler is doing on your behalf. The previous code gets compiled to this:
[CompilerGenerated]
private string <Foo>k__BackingField;
public string Foo
{
[CompilerGenerated]
get
{
return this.<Foo>k__BackingField;
}
[CompilerGenerated]
set
{
this.<Foo>k__BackingField = value;
}
}
So even though the syntax looks a bit strange you are still creating a property exactly the way you are used to.