
Buenas,
hace unos días nos dieron el OK para utilizar .Net Framework 4.0 como plataforma de base para el desarrollo de aplicaciones en un cliente donde estoy colaborando ahora. Como ya veníamos utilizando Visual Studio 2010 con el target para .Net Framework 3.5 en nuestros proyectos, yo aproveché y le mostré a unos compañeros como cambiar el Target Framework de un proyecto para .Net 4.0 y después pasó similar al siguiente escenario:
- El Bruno suelta una frase al estilo: “y ahora podremos utilizar parámetros opcionales”
- El Bruno se lleva una sorpresa cuando escucha: “pero si eso lo estamos utilizando ahora”
- El Bruno empieza a pensar: “jo, estamos utilizando .Net 4.0 y no nos hemos dado cuenta, me crujen los de distribución de apps”
- El Bruno decide optar entre dedicarse a la peluquería o a ver que pasa
Y a partir de aquí, no les comento el detalle, sino que les dejo que saquen sus conclusiones con los siguientes pasos:
1. Abrir Visual Studio 2010.
2. Crear una nueva biblioteca de clases (mal llamada librería) con target .Net Framework 4.0
3. Agregar el siguiente código en la misma:
1: namespace ClassLibrary1
2: {
3: public class Class1
4: {
5: public void Foo(string s = "")
6: { }
7: }
8: }
4. El ejemplo debería quedar similar a la siguiente imagen

5. Una vez compilado el proyecto, si descompilamos el mismo utilizando una herramienta como Reflector, podremos ver que el Target Runtime de nuestro ensamblado es para .Net 4.0, como muestra la siguiente imagen:

6. Y que al momento de compilar, el IDE de Visual Studio ha decorado al parámetro [s] como un parámetro opcional con su correspondiente valor por defecto (los desarrolladores VB sabrán de lo que hablo).
![Clipboard06[5] Clipboard06[5]](http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/elbruno/Clipboard065_5F00_3AA673C3.png)
7. En este momento podemos realizar la prueba de cambiar el Target Runtime de nuestro ensamblado para .Net 2.0 y compilamos nuestra biblioteca. Veremos que no tenemos ningún error, y que si bien es .Net 2.0, la misma compila perfectamente.

8. Si descompilamos nuestro ensamblado, nos encontraremos con una firma igual para la función Foo(), con su parámetro opcional correspondiente; pero en esta ocasión trabajando con .Net 2.0.

![Clipboard02[9] Clipboard02[9]](http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/elbruno/Clipboard029_5F00_7123F93A.png)
Hasta aquí llego con la implementación parámetros opcionales en VS2010, ya que los mismos dependen del IDE de VS2010 y no del target runtime de .Net Framework; aunque claro, no hace falta que comente que el ejemplo del paso 7 solo compila en VS2010 !!!.
Saludos @ Here
El Bruno