Tengo un proyecto que apunta a versiones anteriores del marco .NET (.NET 4.5.2). Instalé Visual Studio 2015 (y, por lo tanto, .NET 4.6 en mi máquina). Me di cuenta de que si uso las características del lenguaje C# lanzadas en .NET 4.6/C# 6, aún se compila. Si el marco de destino de mi proyecto es <.NET 4.6, ¿no debería compilar esto?
public string MyExpressionBodyProperty => "1"; //auto properties are new in C# 6 public string MyAutoProperty { get; } = "1"; private static void MethodThatUsesNameOf(string filename) { if (filename == null) { //nameof was released in C# 6 throw new ArgumentException("The file does not exist.", nameof(filename)); } }¿Cómo puedo asegurarme de que solo estoy usando funciones de lenguaje .NET que funcionan con la versión del marco de trabajo a la que me dirijo?
La versión de .NET Framework y la versión del lenguaje C# son cosas diferentes. Las características del lenguaje C# 6
public string MyAutoProperty { get; } = "1"; nameof(filename)puede ser compilado por VS 2015 en un código que apunta a marcos anteriores.
¿Cómo puedo asegurarme de que solo estoy usando funciones de lenguaje .NET que funcionan con la versión del marco de trabajo a la que me dirijo?
Si intenta usar una característica de .NET 4.6 Framework, obtendrá un error de compilación apropiado si tiene como objetivo un marco anterior.
¿Podría implementar este código en una máquina que no tuviera .NET 4.6?
Sí, lo harías. Siempre que la máquina de implementación tenga un marco compatible con el objetivo en VS2015.
Hay funciones de C# 6 y funciones de .NET 4.6.
nameof es una función de C# 6, por lo que solo necesita ejecutarse en un compilador más nuevo, pero aún puede usar el marco .NET anterior.
Un ejemplo de una característica que requiere .NET 4.6 es el siguiente:
public void Foo(IReadOnlyCollection<string> input) { } public void Main(string[] args) { Foo(new Stack<string>()); } En .NET 4.6 Stack implementa IReadOnlyCollection pero en versiones anteriores no. El código anterior no se compilaría si seleccionó .NET 4.5.2 como su plataforma de destino.