Type GetType y SystemInformation

19/11/2003 - 00:05 por sergi | Informe spam
Por qué System.Reflection no me devuelve el tipo de
System.Windows.Forms.SystemInformation ?

try
{


SysInfoType = Type.GetType("System.Windows.Forms.SystemInformation");

MessageBox.Show(SysInfoType.ToString());

}


catch (Exception e)

{

MessageBox.Show(e.ToString());

}

Preguntas similare

Leer las respuestas

#1 Michael Giagnocavo [MVP]
19/11/2003 - 02:41 | Informe spam
Que output te da? Este codigo no es completo. Puedes poner un sencillo .cs
completo que muestra el error?
-mike
MVP

"sergi" wrote in message
news:
Mostrar la cita
#2 sergi
19/11/2003 - 08:36 | Informe spam
Sí, perdona. Finalmente utilicé typeof para recoger el tipo y me funcionó.
También leí que hubiera debido pasarle un 'fully qualified classname' a
Type.getType(). Aunque de momento lo siguiente me funciona, agradecería
que me explicaráis mejor por qué fallaba el Type.GetType , ya que creo
que no terminé de entenderlo ;)

<code>
using System;

using System.Reflection;

using System.Drawing;

using System.Windows.Forms;

namespace SysInfoReflection

{

public class SysInfoSpy

{

protected Type SysInfoType;

protected PropertyInfo[] pInfo;

protected string[,] sysInfoProps;


public SysInfoSpy ()

{

}

public string[,] ListSysInfoProperties()

{

try

{


SysInfoType = typeof(System.Windows.Forms.SystemInformation);

pInfo = SysInfoType.GetProperties();

int len = pInfo.GetLength(0);


sysInfoProps = new string[len, len];


for (int i = 0; i < len ; i++)

{


sysInfoProps.SetValue(pInfo[i].Name, i, 0);

sysInfoProps.SetValue(pInfo[i].GetValue(null, null).ToString(), i, 1);


}

}


catch (Exception e)

{

MessageBox.Show(e.ToString());

}

return sysInfoProps;

}


}

public class Displayer : Form

{



public Displayer()

{

BackColor = SystemColors.Window;

ForeColor = SystemColors.WindowText;

ResizeRedraw = true;

}


static void Main (string[] args)


{

Application.Run(new Displayer());



SysInfoSpy sis = new SysInfoSpy();

string [,] props = sis.ListSysInfoProperties();


}

protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint (e);


}

}

}

</code>



"Michael Giagnocavo [MVP]" wrote in message
news:
Mostrar la cita
.cs
Mostrar la cita
#3 Tristan
19/11/2003 - 18:06 | Informe spam
Tiene su explicación.

De la documentación de Type.GetType():

"typeName puede ser un nombre de tipo simple, un nombre de tipo que incluya un espacio de nombres o un nombre complejo que incluya una especificación de nombre de ensamblado.

Si typeName incluye sólo el nombre de Type, este método busca en el ensamblado del objeto llamador y después en el ensamblado mscorlib.dll. Si typeName es un nombre completo que incluye el nombre del ensamblado parcial o totalmente, este método busca en el ensamblado especificado."


El tipo quer buscas no se encuentra ni en el ensamblado del objeto llamador, ni en mscorlib.dll. Dado que System.Windows.Forms es un ensamblado "strong-named", se necesita el nombre plenamente cualificado, que es bastante largo:

typeof(SystemInformation).AssemblyQualifiedName =>

System.Windows.Forms.SystemInformation, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken·7a5c561934e089


Creo que hay un esquema mucho más simple que emplear este nombre. Obtener el ensamblado a partir de un tipo conocido del mismo ensamblado, y usar el GetType() de la clase Assembly:

Assembly forms = typeof(Form).Assembly;
Type sysInfo = forms.GetType("System.Windows.Forms.SystemInformation", true);
MessageBox.Show(sysInfo.ToString());


Juan Carlos Badiola
MVP - C#
Ads by Google
Search Busqueda sugerida