Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - [D4N93R]

#1531
Para todos los ejemplos usaremos la siguiente clase:

Código (csharp) [Seleccionar]


public class Person
{
     private string m_firstName;
     private string m_lastName;
     
     public string FirstName
     {
          get { return m_firstName; }
          set { m_firstName = value; }
      }

     public string LastName
     {
          get { return m_lastName; }
          set { m_lastName = value; }
      }

      public void Run()
      {   }
}

#1532
Introducción a System.Reflection

Reflection es la habilidad que tiene un código para revisar su propia estructura, es decir, podemos revisar la metadata que está en el assembly (en el caso de .net) y manipularla a nuestro antojo.

Con Reflection podemos encontrar cuarquier detalle sobre un objecto, assembly, propiedad, además de poder invocar métodos y obtener o establecer valores de una propiedad, todo ésto en tiempo de ejecución!

Esta habilidad nos da poder en nuestro código pero como todo,  hay que saber utilizarlo en el momento preciso y no abusar sobre el uso de Reflection ya que nuestro código podría verse afectado por pérdidas de performance.

Se preguntarán dónde y cuándo hay que utilizar Reflection, pues es algo que tienen que saber utilizar cuando lo necesiten, hay situaciones como formularios que requieren un diseño dinámico según el tipo que se pase en X parámetro, y en ese momento se preguntarán: "¿Escribo el formulario a hardcode, o utilizo reflection?", éste es uno de los casos más utilizados, también pódemos usarlo para serializar objectos de forma personalizada, etc.

¿Cómo comienzo a utilizar reflection?

Hay dos formas de comenzar: La primera es usando typeof() y la segunda es utilizando el método GetType() que todos los objectos tienen. Cualquiera de las dos formas que se usen retornan un objeto tipo Type, ese type es el que nos otorga la información de ese tipo.

Entre los principales métodos de Type tenemos:


  • GetField() Obtiene el campo según el nombre.
  • GetMethod() Obtiene un método, y si éste tiene sobre cargas, al igual que el constructor, hay que pasarle el tipo correspondiente de la sobre carga.
  • GetProperty() Obtiene la propiedad según el nombre.

Nota: aparte de los métodos anteriores existen los mismos en plural, es decir que en vez de obtener un miembro, obtienes un arreglo con los resultados según los parámetros que le indiques. Ejm: GetProperty() tienes:  GetProperties() el cual  puedes llamar sin parámetros para obtener un PropertyInfo[] con todas las propiedades.

Un punto muy importante es que en todo ésto, aunque hayamos sacado toda ésta información a partir de una instancia, Reflection se basa en metadata, es decir todo lo que exploramos y manipulamos, lo hacemos sin la instancia inicial, es por eso que cuando se vaya a invocar un método, a establecer valores en campos o propiedades, etc, nos pidan la instancia a la cual queremos realizar ese trabajo.
#1533
Código (csharp) [Seleccionar]

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Text;
   4:  using System.Net.NetworkInformation;
   5:   
   6:  namespace D4N93R.Traceroute
   7:  {
   8:      //Delegado para los eventos del Traceroute
   9:      public delegate void TracertEventHandler(object sender, TracertEventArgs e);
  10:     
  11:      public class Tracert
  12:      {
  13:          int     m_timeout   = 0;
  14:          string  m_host      = "";
  15:          int     m_maxHops   = 0;
  16:   
  17:          public event TracertEventHandler EchoReceived;
  18:          public event TracertEventHandler ErrorReceived;
  19:          public event TracertEventHandler TracertCompleted;
  20:   
  21:          public Tracert(string host, int TimeOut, int maxHops)
  22:          {
  23:              m_host = host;
  24:              m_timeout = TimeOut;
  25:              m_maxHops = maxHops;
  26:          }
  27:          public void Start()
  28:          {
  29:              PingReply reply;
  30:              Ping pinger = new Ping();
  31:              PingOptions options = new PingOptions();
  32:   
  33:              //Con esto le decimos al paquete que nada más salte un equipo.
  34:              options.Ttl = 1;
  35:   
  36:              options.DontFragment = true;
  37:   
  38:              byte[] buffer = Encoding.ASCII.GetBytes("Algo de datos");
  39:              try
  40:              {
  41:                  do
  42:                  {
  43:                      //Tiempo antes del comando
  44:                      DateTime start = DateTime.Now;
  45:   
  46:                     //Mandamos el ping
  47:                      reply = pinger.Send(m_host,
  48:                                          m_timeout,
  49:                                          buffer,
  50:                                          options);
  51:   
  52:                      //Restamos la diferencia de tiempo para conocer la latencia.
  53:                      long milliseconds = DateTime.Now.Subtract(start).Milliseconds;
  54:                      if ((reply.Status == IPStatus.TtlExpired)
  55:                         || (reply.Status == IPStatus.Success))
  56:                      {
  57:                          //Damos respuesta en caso de que encontremos un host
  58:                          //o que se haya finalizado el proceso.
  59:                          OnEchoReceived(reply, milliseconds, options.Ttl);
  60:                      }
  61:                      else
  62:                      {
  63:                          OnErrorReceived(reply, milliseconds);
  64:                      }
  65:                      options.Ttl++;
  66:   
  67:                     //Mientras no haya terminado, es decir, no sea Success
  68:                     //seguimos mandando ping con un TTL aumentado.
  69:       
  70:                     // Notemos que cuando la resuesta es Success
  71:                     //es porque el paquete llego al destino
  72:                  } while ((reply.Status != IPStatus.Success)
  73:                          && (options.Ttl < m_maxHops));
  74:              }
  75:              catch (PingException pex)
  76:              {
  77:                  //Acá pueden implementar algo en caso de algun error.
  78:                  throw pex.InnerException;
  79:              }
  80:              finally
  81:              {
  82:                  if (TracertCompleted != null)
  83:                      TracertCompleted(this, new TracertEventArgs(null, 0, 0));
  84:              }   
  85:          }
  86:   
  87:   
  88:          //Manejo de los eventos.
  89:          private void OnErrorReceived(PingReply reply, long milliseconds)
  90:          {
  91:              InvokeErrorReceived(reply, milliseconds);
  92:          }
  93:   
  94:          private void OnEchoReceived(PingReply reply, long milliseconds, int ttl)
  95:          {
  96:              InvokeEchoReceived(reply, milliseconds, ttl);
  97:          }
  98:          public void InvokeEchoReceived(PingReply reply, long milliseconds, int ttl)
  99:          {
100:              if (EchoReceived != null)
101:                  EchoReceived(this, new TracertEventArgs(reply, milliseconds,ttl));
102:          }
103:          public void InvokeErrorReceived(PingReply reply, long milliseconds)
104:          {
105:              if (ErrorReceived != null)
106:                  ErrorReceived(this, new TracertEventArgs(reply, milliseconds,0));
107:          }
108:      }
109:  }
#1534
Cita de: j24 en  2 Junio 2010, 16:41 PM
Sep, DragonFly rlz!

Me gusta bastante y sirve mucho a la hora de analizar una web.

Sirve de mucho des decir poco! hehe! Dragonfly es el queso de mis cachapas.. es como decir que es el chocolate de mis churros o algo así xD
#1535
Foro Libre / Re: ^^
2 Junio 2010, 17:28 PM
Haha casi muero cuando vi la vaca hahahahahaha xD

Por cierto el Asunto del post va muy bien con el video! xD

;-) ;-)
#1536
Hola,

Como no uso para nada VB.Net estaba buscando el modificador de acceso internal ,por lo que encontré esta página donde sale un listado de muchas diferencias.

Se puede notar también que VB.Net es más fácil de leer ya que es más hacia un lenguaje humano, pero C# a su vez tiene una sintaxis más limpia y pulida.

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
#1537
Lo que quieres es No agregar un registro nuevo, sino, agregar una columna?

Siguiendo tu código:

Código (vbnet) [Seleccionar]


dt.Columns.Add("Codigo", Type.GetType("System.String"))

For i = 0 To datos1.Tables("sierra").Rows.Count - 1
    cta = datos1.Tables("sierra").Rows(i).Item(0).ToString
    cod = datos1.Tables("sierra").Rows(i).Item(2).ToString
   
    dt.Rows[i]["Codigo"] = cod 'asignas cod  a la columna Codigo que creaste arriba.
   'En C# funciona, no se la sintaxis de VB.Net hehe

Next



El código no lo testié, dime si hay alguna excepción o algo..
Saludos
#1538
Si puedes postear un poco más de código.. Porque no veo bien claro todo., en teoría va bien.
#1539
Noticias / Re: Microsoft contraataca a Google
2 Junio 2010, 16:05 PM
Cito textualmente:

Citar. El malware utilizaba varias vulnerabilidades 0-day. Una de ellas permitía la ejecución de código en Internet Explorer.

O sea, que usuario decente, y más aún un empleado de Google utiliza Internet Explorer?

CitarUno de los empleados de Google pinchó sobre un enlace que le llegó a través de mensajería instantánea. Éste le redirigió a una web que
aprovechó el fallo de seguridad, previamente desconocido. Los empleados de todas las compañías deberían estar concienciados sobre el peligro que supone visitar enlaces no solicitados, o filtrarlos directamente.

Exactamente lo que yo había dicho. Y además, si tienen la direccción de IM de alguno de los empleados, es 100% factible explotar un bug de Mac en caso de que lo estén usando.

Es simplemente una excusa de Google para dejar de usar Windows y de paso Airear su Chrome OS.

Marketing, como siempre xD
#1540
Dos cosas:

1) Hacer es con H
2) Dale un ojito a esta clase http://msdn.microsoft.com/en-us/library/system.io.filestream.aspx

Saludos