2010-07-09 12 views
5

Esta pieza de código se compila bien en VS 2010 en un proyecto de marco 3.5 (I triples comprobado que)El código de argumento opcional se compila en .NET 3.5. ¿Por qué?

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

¿Por qué? No veo nada en la especificación de C# 4 (doc version), sección 21.1, que dice que esto debería ser compatible con versiones anteriores. ¿Cómo es que no tengo ningún error de compilación? ¿Esto fallará silenciosamente en algunas circunstancias?

+0

posible duplicado de [¿Se pueden usar los parámetros opcionales en la orientación por código .Net 3.5? ] (http://stackoverflow.com/questions/1210679/can-you-use-optional-parameters-in-code-targeting-net-3-5) –

+0

En general, no hay relación entre la versión del lenguaje C# y la versión .NET. –

Respuesta

8

proyecto + Propiedades, pestaña Construir, desplazarse hacia abajo, avanzada. Puede cambiar la versión del idioma a "C# 3.0" si prefiere mantener la compatibilidad del código fuente.

Pero sí, está utilizando el compilador C# 4.0 en VS2010, independientemente de la versión .NET de destino que utilice. La salida del compilador, IL, no ha cambiado en .NET 4.0. No, no puede usar dynamic, requiere un .NET 4.0 solo soporte (Microsoft.CSharp.dll)

3

Los parámetros opcionales son simplemente azúcar sintáctico; si no lo especifica en el sitio de la llamada, el compilador lo llena con el valor predeterminado. No hay dependencia en el framework .NET en sí mismo para hacer cualquier cosa.

Ver también Can you use optional parameters in code targeting .NET 3.5?

Cuestiones relacionadas