Gerardo Contijoch

Experiencias del día a día trabajando con .NET – ASP.NET, C#, ASP.NET MVC y demas…

Keyword default en C#

Posted by Gerardo Contijoch en febrero 15, 2009

Desde la versión 2.0 de C# hay un nuevo uso para keyword default que no todos conocen y resulta de muchísima utilidad en ciertos casos. Típicamente a este keyword lo vemos en bloques de tipo switch, pero también puede ser utilizado para la inicialización de variables. En este último caso, la función del keyword es devolver el valor por defecto de un tipo dado. Veamos un ejemplo:

   1:
   2: public class UnaClase { ... }
   3:
   4: public struct UnaEstructura { ... }
   5:
   6: public void Test(){
   7:
   8:     int i = default(int);
   9:     string s = default(string);
  10:     UnaClase c = default(UnaClase);
  11:     UnaEstructura est = default(UnaEstructura);
  12:
  13:     /* ... */
  14: }
  15:

Acá la variable i se va a inicializar en 0 (que es el valor por defecto para los tipos numéricos), s en null (que es el valor por defecto para strings), c en null (valor por defecto para tipos por referencia) y est va inicializarse con una nueva estructura cuyos campos toman el valor por defecto de sus tipos.

En un código como el anterior no tiene mucha utilidad este keyword ya que sabemos de antemano el valor por defecto de los tipos dados y podemos asignarlos directamente. La verdadera utilidad se descubre cuando trabajamos con tipos genéricos:

   1: public class GenericList<T> {
   2:
   3:     private class Node {
   4:         public Node Next;
   5:         public T Data;
   6:     }
   7:
   8:     private Node head;
   9:
  10:     //...
  11:
  12:     public T GetNext() {
  13:         T temp = default(T);
  14:         Node current = head;
  15:         if (current != null) {
  16:             temp = current.Data;
  17:             current = current.Next;
  18:         }
  19:         return temp;
  20:     }
  21: }

En este ejemplo (sacado de acá) es imposible saber que valor por defecto hay que asignarle a la variable temp (dentro del método GetNext()) ya que su tipo es genérico. Por supuesto también puede utilizarse para determinar si una variable esta o no inicializada sin necesidad de conocer su tipo.

¡Nos vemos en el próximo post!

Publicado originalmente en https://gerardocontijoch.wordpress.com.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: