Set and get properties and constants differences

Is there any difference between the following declarations (other than the difference between the const and static readonly)?

public static int foo1 { get; } = 8;

private static readonly int foo2 = 4;
public static int Foo2
{
    get { return foo2; }
}

private const int foo3 = 9;
public static int Foo3
{
    get { return foo3;}
}

What happens behind the scenes with foo1? is it the same as foo2 or foo3?

I ask about foo1 because I can't make it a const or readonly with this syntax, so I also ask if it's actually a constant?

Jon Skeet
people
quotationmark

It's the same as foo2. The difference with foo3 is that the property access won't even consult foo3 - Foo3 is compiled to code equivalent to

public static int Foo3
{
    { get { return 9; } }
}

Now admittedly from the perspective of calling code it really doesn't matter - in all cases you're exposing a property which will always return the same value.

If you want the equivalent of Foo3 without the const, you could use:

public static int Foo4 => 10;

people

See more on this question at Stackoverflow