2008-10-06 9 views
13

¿Cuáles son algunas de las nuevas características que se pueden usar en .NET 2.0 que son específicas de C# 3.0/3.5 después de la actualización a Visual Studio 2008? Además, ¿cuáles son algunas de las características que no están disponibles?C# .NET 3.0/3.5 características en 2.0 con Visual Studio 2008

  • lambdas
  • Los métodos de extensión disponibles (por declarar un System.Runtime.CompilerServices.ExtensionAttribute vacío)
  • propiedades automáticas
  • inicializadores de objeto
  • Collection Inicializadores
  • LINQ to Objects (implementando IE métodos de extensión numerables, ver LinqBridge)

no disponible

  • árboles de expresión
  • WPF/Silverlight Bibliotecas
+0

Árboles de expresión están disponibles mediante el uso de Mono. Ver mi respuesta a continuación. –

Respuesta

16

Se puede utilizar cualquier nueva característica de C# 3.0 que se maneja por el compilador mediante la emisión 2,0-compatible IL y no hace referencia a cualquiera de los nuevos conjuntos de 3,5:

  • Lambdas (utilizado como Func<..>, no Expression<Func<..>>)
  • los métodos de extensión (por la que se declara un vacío System.Runtime.Com pilerServices.ExtensionAttribute)
  • propiedades automáticas
  • inicializadores de objeto
  • Collection Inicializadores
  • LINQ a Objetos (mediante la implementación de <T> métodos de extensión IEnumerable, ver LinqBridge)
1

lambdas & Los métodos de extensión son manejados exclusivamente por el compilador y puede ser utilizado con el framework .Net 2.0.

+1

Lambdas como delegados, sí. Pero lambdas como expresiones se basan en la (s) clase (s) de expresión de .NET 3.5. –

3

Para definir los métodos de extensión, tendrá que suministrar la siguiente clase, si se orienta .NET 2.0:

namespace System.Runtime.CompilerServices { 
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)] 
    sealed class ExtensionAttribute : Attribute { } 
} 
+0

También tuve que hacer esto (lo encontré sugiriendo esto en otro sitio) para poder usar Ninject 1.0 para 2.0 en un proyecto de 3.5 SP1. Muy extraño ... –

5

¡Casi todo! Daniel Moth cubre este here y here. Eso solo deja soporte de tiempo de ejecución: LINQ-to-Objects es provisto por LINQBridge, lo que deja APIs más grandes como el soporte Expression y herramientas como LINQ-to-SQL. Estos son demasiado grandes para ser razonablemente transferidos a .NET 2.0, así que usaría .NET 3.5 para estos.

5

Cubro esto en un article on my site.

Casi todas las características de C# 3.0 están disponibles cuando se apunta a .NET 2.0. Para los métodos de extensión, necesita definir un atributo adicional. Los árboles de expresión no están disponibles en absoluto. El soporte de las expresiones de consulta se basa en una traducción seguida de las reglas "normales" de C#, por lo que necesitará algo para proporcionar los métodos Select, Where etc. LINQBridge es la implementación estándar de facto "LINQ to Objects in .NET 2.0". Usted puede querer declarar los delegados en las familias Func y Action delegado para que sea más fácil trabajar con expresiones lambda - y luego eliminarlos si/cuando se mueve a .NET 3.5

2

Puede usar la versión de Mono del Sistema .Core que es totalmente compatible con LINQ & Expression Trees. Compilé su fuente contra .net 2.0, y ahora puedo usarlo en mis proyectos .net2.0. Esto es ideal para proyectos que se deben implementar en win2k, donde .net3.5 no está disponible.

+0

¿estos árboles de expresiones requieren .Net 2.0 SP1? – Lucas

+0

no. plain old .NET 2.0. Funciona muy bien incluso en máquinas win2k. –

Cuestiones relacionadas