A constant’s value must be known at compile time. “new Vector3(10, 0, 5)” implies that you have to run some code to get the value, but you can’t run the code that hasn’t been compiled yet.
Named and optional parameters are C# 4.0 feature, but VS2010 supports them even if you target .Net 3.5. Unity’s compiler also supports named and optional parameters.
For optional parameters, I think it only work with primitive datatypes. I remembered using it as well, for something like int input = 0, if my memory serves.
Named argument looks really charming. I love that in Objective-C and really miss it when I switch to C# and Unity. Hopefully Unity can switch to use .NET 4.0 soon
Unity’s Mono supports most of .Net Framework 3.5 libraries/classes, Common Language Runtime 2.0, and C# 4.0. You may use C# 4.0 as long as you do not use CLR 4.0 and .Net 4.0 features.