views:

74

answers:

2

This piece of code compiles OK in VS 2010 in a framework 3.5 project (I triple checked that)

    public LoggingClient(string uri = "net.msmq://localhost/logging"){...}

Why? I see nothing in the C# 4 spec (doc version), section 21.1, that says this should be backwardly compatible. How is it that I get no compilation error? Will this fail silently in some circumstances?

+3  A: 

Optional parameters are merely syntactic sugar - if you don't specify it at the call site, the compiler fills it the default value. There's no dependancy on the .NET framework itself to do anything.

See also http://stackoverflow.com/questions/1210679/can-you-use-optional-parameters-in-code-targeting-net-3-5

Anon.
+1  A: 

Project + Properties, Build tab, scroll down, Advanced. You can change the Language Version to "C# 3.0" if you prefer to maintain source code compatibility.

But yes, you are using the C# 4.0 compiler in VS2010, regardless of the target .NET version you use. The output of the compiler, IL, hasn't changed in .NET 4.0. No, you can't use dynamic, it requires a .NET 4.0 only support assembly (Microsoft.CSharp.dll)

Hans Passant