miércoles, septiembre 29, 2010

Otra de Microshit!!

Hoy tuve la "dicha" de intentar instalar el SQL Server 2008 Managment Studio Express en mi equipo con Windows XP SP2.

Resulto que el ejecutar las reglas de validacion de la instalacion saltaron dos problemas de esos en los que M$ es especialista.

1) Falla en la regla Sql2005SsmsExpressFacet, incluso despues de haber desinstalado el SQL Server 2005 Managment Studio Express. La solucion a esto fue modificar en el register la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsfoft\Microsoft SQL Server y renombrar la clave "90" temporalmente durante la instalacion.

2) Falla en la regla VSShellInstalledRule, relacionado con no tener instalado el SP1 de Visual Studio 2008. Con lo delicado que es el VS2008 la verdad no tenia mucho interes en instalar el fulano SP1, asi que la solucion paso por dos pasos:

a) Ejecutar el instalador del Managment Express manualmente e indicarle que ignorara esa regla:

SETUP /ACTION=install /SkipRules=VSShellInstaled RebootRequiredCheck

b) Cambiar en el register el valor de la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevVis\VS\Servicing\9.0\SP segun como se indica aqui

Una vez finalizada la instalacion, se reversan los cambios hechos en el register y listo.


viernes, septiembre 24, 2010

C#: Constructor implicito vs Contructor Explicito

Al crear una instancia de una clase o estructura, generalmente se utiliza el constructor implícito, mediante la siguiente sintaxis:

MyClass var = new MyClass();

En el caso de las clases, es posible personalizar el constructor mediante la sintaxis:

public MyClass()
{
// Aqui va el codigo de inicializacion de la clase
}

Pero en el caso de las estructuras, C# no permite crear un constructor sin parámetros, lo cual nos obligaría a incluir un parámetro "dummy" solo para saltar esta restricción:

public MyStruct(object foo)
{
// Aqui va el codigo de inicializacion
}

MyStruct var = new MyStruct(null);

Para evitar esto, podemos hacer uso de la clausula "static" para crear un constructor personalizado, el cual no requiere que se le indique ningún tipo de parámetro.

public static MyStruct New()
{
MyStruct obj = new MyStruct();
obj.Prop1 = 0;
obj.Prop2 = string.Emtpy;

return obj;
}

luego, podemos crear nuestra instancia perfectamente inicializada mediante la sintaxis:


MyStruct var = MyStruct.New();

Aun mejor, esta solución nos permite sobrecargar el constructor explicito con distintas variaciones, de acuerdo a las necesidades (cosa que no es posible con el constructor implícito).