lunes, 26 de febrero de 2007

Como pasar parámetros opcionales en C#

Buenas a todos, desde hace ya como cosa de 1 o 2 meses, he empezado a programar en C# porque si programaba en VB.NET, como también programo a menudo en VB6, me estaba dando cuenta que no estaba realizando código 100% .NET, debido a que seguía utilizando funciones de VB6 en .NET, etc., etc.
Eso si mi cambio no ha venido dado porque diga que C# es mejor que VB.NET ni nada por el estilo, sino por obligarse a uno mismo a no tener vicios de VB6 en .NET, aparte y lo más importante para ello es, que el cambio ha venido porque también se algo de Java y entonces la similitud con C#, me ayudo a verlo con mejores ojos. Bueno al grano que me estoy yendo por las ramas.Ayer estaba intentando abrir en ADOB.Recordset, sin más para hacer unas pruebas de rendimiento con VB6 y una dll hecha en .NET expuesta en modo COM, estaba continuamente fallándome el siguiente método, porque ni me compilaba.Rs.Open();Entonces yo me preguntaba, porque me estará fallando este puñetero método sin VB.NET o VB6 tira hacia delante. Bien mirando un poco me fije que el Rs.Open(), tiene una serie de parámetros, que aunque no los necesite pasar porque lo creo desde cero, C# me obliga a ponerlos. Entonces listo de mí dije, pues ale, te paso lo siguiente, con todos los parámetros asignados y con null, que no tiene valor:Rs.Open(null, null, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic, 0)Así el compilador lo dejo pasar, obviamente, el ya se cree que tiene todos los parámetros, pero al ejecutar cual fue mi sorpresa, que dicha sentencia fallo, me decía algo así como error en los tipos, pues bien falla, porque se cree que el parámetro 1 tiene valor y no ha sido omitido como se puede, debido a que está especificado como opcional.Pues bien, haciendo simplemente un F1 en menos de un minuto di con la solución “Type.Missing”, es para especificar que un parámetro opcional no tiene valor, entonces la sentencia me quedaría de la siguiente manera:Rs.Open(Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)Así si que funciona correctamente, pero C#, como eres con el tema de no dejar pensar al compilador, lo quieres todo estrictamente, pero eso me gusta mucho, ya que me ayuda a detectar muchisimos fallos de primeras.En fin que me vuelvo a ir por las ramas, a ver después de explicar como pasar parámetros que son opcionales a un procedimiento, ahora vamos a intentar poner un parámetro opcional en una función de C#.Después de intentarlo, el compilador da el siguiente error:“No se permiten especificadores de parámetros predeterminados”Así que ya sabéis en C# no se pueden poner parámetros como opcionales en un procedimiento o función, eso si, si realmente lo queremos así, nos podemos basar en la sobrecarga y punto.Os paso un link de una página donde pone lo que es de una forma en VB.NET es igual en C#, por si alguien se atreve a venirse al lado de C#.http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.htmlUn Saludo y hasta otra

No hay comentarios.: