viernes, 11 de junio de 2010

Crear Objetos dinamicamente

Hay dos formas de crear de forma dinámica un objeto "on the fly".
Estas formas de implementar patterns de "factory" usan siempre reflection de .net.
Incluir:
using System.Reflection;

Lo esencial quizas es que todos los objetos que creemos tengan una clase Base comun, para poder asignarselos y luego poder castearlos a la clase que queremos.

Type tipoObjeto = typeof(ClaseaInstanciar)
ClaseBase c = (ClaseBase)Assembly.GetExecutingAssembly().CreateInstance(tipoObjeto.FullName);

Otra forma es (aparentemente mas lenta):
string strClase = "NombreDeClaseACrear";
Type tipoClase = Type.GetType(strClase);
ClaseBase c = (ClaseBase) t.InvokeMember("ctor", BindingFlags.CreateInstance, null, null, null);


---------------------------------------

Ejemplo Concreto:

class Persona
{
string nombre="";
}
class Trabajador : Persona
{
string IDTrabajador = "";
}


private void llamada()
{
Type tipoObjeto = typeof(Trabajador);
Persona c = (Persona)Assembly.GetExecutingAssembly().CreateInstance(tipoObjeto.FullName);
}


viernes, 4 de junio de 2010

Obtener la tangente en grados en .net

El angulo que devuelven las funciones trigonometricas de .net es en radianes, por lo cual hay que transformar esto a grados si es eso lo que se desea.
La forma es asi:

double phi = 0; //angulo en radianes;
phi = Math.Atan2(y , x);
angulo = phi * (180.0 / Math.PI);