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?

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;
See more on this question at Stackoverflow