Lluís Franco on Geeks.ms
  • Home

10 cosas que me gustan de C# respecto a VB

  • By lfranco
  • Dic-23-2008
  • Sin categoría
  • 22 Comments.

peleaAntes de empezar a leer este post, un aviso: En ningún modo pretendo crear polémica o abrir el viejo debate otra vez, si no más bien enumerar algunas cosillas que hacen que *yo* me sienta más cómodo trabajando con C# que con VB, tanto a nivel de lenguaje como del propio editor. Lo remarco porque quiero que quede bien claro que es una opinión personal, ok? No se trata de comerle el coco a nadie…

Algunas de estas cosillas ya las he compartido con algunos de vosotros en algún evento de los grupos de usuarios, o simplemente delante de unas cervezas (aquí la conversación suele tornarse más pasional y tiende a alargarse un poco), jejeje…, y a decir verdad pocas veces nos ponemos de acuerdo ¿eh agüelo?. Parece ser que antes de empezar a hablar cada cual ya se ha posicionado y de aquí no nos movemos… lo cual es hasta cierto punto normal. Uno sabe con qué herramienta se encuentra más cómodo, aunque pueda usar ambas de forma indistinta.

De hecho he tirado más líneas de código con VB que con cualquier otro lenguaje, y eso que empecé en este mundillo con C y posteriormente con C++, para luego pasar a los lenguajes ‘más productivos’ como Delphi o finalmente VB en sus primeras versiones. No fue hasta 2002 y las primeras versiones de .NET que volví a usar la vieja sintaxis del punto y coma. De modo que VB en-todas-sus-variedades me es muy querido, y debo reconocerle sus ventajas… Sin embargo, codificar, al igual que leer o hablar, es algo que siempre haces mejor o te sientes más cómodo en uno de los lenguajes que dominas, y aquí reconozco que C# (como antes de conocerlo lo fue Java) es mi predilecto. Siempre que YO decido el lenguaje a utilizar en un nuevo proyecto, lo escojo, y en caso contrario intento convencer a la otra persona (ya sea compañero, cliente, etc.).

Os enumero a continuación una lista de cosas que me gustan de C#, o más bien que no me gustan cuando al cabo de un tiempo de trabajar con C#, me pongo a codificar con VB. No siguen ningún orden ni patrón y las voy a ir enumerando conforme se me vayan ocurriendo:

1) Escribo menos código && código más limpio:

En este punto, un desarrollador de VB acostumbra a decirme que esto no es cierto. Que si bien la sintaxis de VB es en alguno puntos ‘rocambolesca’ es para aclarar, y además el propio editor de código se encarga de escribirlo. Sin embargo tengo comprobado que con el editor de C# en la gran mayoría de las situaciones tecleo menos para decir lo mismo, y queda más claro (al menos para mí). Ojo! Es importante destacar que en ningún momento me mueve el afán de teclear menos, sino que el código resultante sea más legible. Comparemos los siguientes ejemplos:

Declarar una variable:

C#:

int x = 5;

VB:

Dim x As Int = 5

Bloques de código (ends por todas partes :-P).

C#:

if(Nombre == "Pepe" && Sueldo <= 500)
{
...
}

VB:

If Nombre = "Pepe" AndAlso Sueldo <= 500 Then
...
End If

Operador AddressOf

C#:

Thread t = new Thread(CountSheep);

VB:

Dim t As New Thread(AddressOf CountSheep)

Expresiones lambda:

C#:

Func<int, Func<int, int>> mult = (int x) => (int y) => x * y;

VB:

Dim mult As Func(Of Integer, Func(Of Integer, Integer)) = _    
Function(x As Integer) Function(y As Integer) x * y

Implementar una interfaz (no es preciso Implements):

C#:

interface ITest 
{ 
    string getValue();
}
 
class Test : ITest { 
    string getValue() 
    { 
        Random r = new Random(); 
        return r.Next().ToString(); 
    } 
}

VB:

Interface ITest    
    Function getValue() As String
End Interface 
 
Class Test    
    Implements ITest     
 
    Public Function getValue() As String Implements ITest.getValue
        Dim r As New Random
        Return r.Next().ToString()
    End Function
End Class

Podriamos seguir con Overridable, Overrides y unos cuantos más… Pero mejor vamos al siguiente punto que si no, no acabo el post hoy… 🙂

2) No más underscores!

Cuantas veces he tenido que escuchar “no tengo porque terminar cada línea de código con un punto y coma!”. Pues precisamente, el delimitador de línea es lo que permite que en los lenguajes derivados del viejo y bueno ‘C’ no tengamos que hacer algo tan antinatural como partir las líneas de código con underscores (_). Además suele pasar que es una de las cosas que olvido con mayor rapidez, y cada vez que escribo en VB una query con LINQ acabo por soltar un “AAAAARGH!!! OTRA VEZ!!!”.

C#

List<int> nums = new List<int>(new int[] { 1, 2, 3, 4 });
var mynums = from n in nums
             where n < 5
             orderby n
             select n;

VB:

Dim nums As New List(Of Integer)(New Integer() {1, 2, 3, 4}) 
Dim mynums = From n In nums _ 
    Where n < 5 _ 
    Order By n _ 
    Select n 

3) Matrices y Listas: [] en lugar de ():

Cuando estoy picando o leyendo código me gusta saber con exactitud si estoy llamando a una función, a una propiedad u obteniendo el valor de una matriz o colección. Precisamente por eso prefiero usar corchetes en lugar de paréntesis para acceder a los miembros de una matriz o lista. En el ejemplo siguiente en la llamada a nums(i) en VB, podría ser tanto un método como una matriz, como una propiedad que devuelve una matriz o lista:

C#

List<int> nums = new List<int>(new int[] { 1, 2, 3, 4 });
Console.WriteLine(nums[2].ToString());

VB:

Dim nums As New List(Of Integer)(New Integer() {1, 2, 3, 4}) 
Console.WriteLine(nums(2).ToString()) 

4) Parámetros de salida (out):

Tipos de parámetro de salida. Estos son muy parecidos a los parámetros por referencia (ref), pero no necesitan ser inicializados. Resultan particularmente útiles en algoritmos recursivos. Visual Basic no dispone de nada equivalente, aunque si permite el paso de valores por referencia.

C#:

static void Method(out int i)
{
    i = 44;
}
static void Main()
{
    int value;
    Method(out value);
}

5) Los códigos de escape y las cadenas verbatim:

Otra cosa que me molesta es que VB no reconoce los carácteres de escape contenidos en un string. Esto es particularmente útil cuando deseamos mostrar un retorno de línea ‘n’ o una tabulación ‘t’ dentro de una cadena. En Visual Basic hay que recorrer a la concatenación de Environment.NewLine o artimañas parecidas como concatenar directamente el carácter. Por ejemplo el código siguiente se muestra así:

MessageBox.Show("holanquental");

 
C#:
 
MsgBox1

VB:

MsgBox2

En este punto más de uno se preguntará ¿y que pasa si no quiero tratar estos caracteres de escape como especiales?, ¿o si quiero mostrar una ruta de acceso que contiene varios caracteres ‘’? Bien, para ello tenemos varias alternativas: Podemos anteponer un carácter ‘’ a todo símbolo que deseemos mostrar literalmente o podemos usar cadenas verbatim (también llamado ‘literal de cadena textual’):

MessageBox.Show("C:\Windows\system32\Calc.exe");

 
MessageBox.Show(@"holanquental");

Las cadenas verbatim van incluso un poco más allá y permiten incluso poder partir una cadena en varias líneas, lo que clarifica en mucho el código:

MessageBox.Show(@"SELECT O.OrderID, O.CustomerID, O.EmployeeID, 
                O.OrderDate, O.RequiredDate, O.ShippedDate, 
                O.ShipVia, O.Freight, O.ShipName, O.ShipAddress, 
                O.ShipCity, O.ShipRegion, O.ShipPostalCode, 
                O.ShipCountry, C.CompanyName, C.Address, 
                C.City, C.Region, C.PostalCode, C.Country
                FROM dbo.Customers AS C 
                INNER JOIN dbo.Orders AS O 
                ON C.CustomerID = O.CustomerID");

6) Propiedades autogeneradas:

Algo tan sencillo como crear una propiedad para una clase, lo es todavía más en C#, ya que permite el uso de propiedades autogeneradas. Esto hace que el compilador maneje internamente una variable privada a nivel de clase para almacenar el valor, quedando esta parte oculta al desarrollador. Esta característica estará disponible en la próxima versión de Visual Basic, pero de momento todavía tenemos que conformarnos con representarlo así:

C#:

class Foo
{
    public int id { get; set; }
    public string name { get; set; }
}

VB:

Class Foo 
    Private _id As Integer 
    Public Property id() As Integer 
        Get 
            Return _id 
        End Get 
        Set(ByVal value As Integer) 
            _id = value 
        End Set 
    End Property 
    Private _name As String 
    Public Property name() As String 
        Get 
            Return _name 
        End Get 
        Set(ByVal value As String) 
            _name = value 
        End Set 
    End Property 
End Class

7) Refactoring:

Hoy en día, al igual que el uso de pruebas unitarias, empieza a ser impensable no refactorizar el código para una mejor comprensión, que repercute en un mejor índice de mantenibilidad (o Maintainability index, vaya usted a saber cómo se traduce) del código. Bien, pues el menú ‘Refactor’ del editor de C# no aparece en VB. Y la única información acerca de refactorizar el código VB nos enlaza con un Add-In de terceros, la cual a decir verdad es una gran utilidad. Lo sé, porque he usado la versión PRO de este producto durante bastante tiempo. Pero el hecho es que Visual Studio no incorpora ninguna utilidad ‘de fábrica’ para refactorizar el código, lo que no deja de ser sorprendente…

RefactorMenu

8) Posibilidad de desactivar ‘Strict on’:

Al ser VB la evolución de un lenguaje no tan ‘estricto’ como C#, nos ofrece la posibilidad de desactivar la opción Strict On, y de este modo dejar que el compilador se encargue de realizar muchas conversiones implícitas. Pero lo más peligroso de todo es que la opción viene desactivada ‘de fábrica’ y en cambio no conozco ningún buen programador de VB (que los hay, y muchos) que no sea lo primero que active. Muchos errores en tiempo de ejecución podrían ser evitados si el propio compilador nos obligase a codificar correctamente, en lugar de actual de este modo más ‘relajado’:

VB (con Option Strict Off):

Dim s As String
s = DateTime.Today

VB (con Option Strict On):

Dim s As String
s = DateTime.Today.ToString()

Observar que con Option Strict activado, el compilador no permite asignar una fecha a una variable de tipo cadena (con razón!), de modo que para poder compilar debemos realizar una conversión explícita.

Recomiendo dar un vistazo a este artículo de coding horror:

http://www.codinghorror.com/blog/archives/000355.html

9) Microsoft.VisualBasic:

Son legión los programadores que provienen de versiones anteriores de .NET (6 o anteriores), de modo que para facilitarles el camino los proyectos de VB incorporan el espacio de nombres Microsoft.VisualBasic, el cual a su vez incorpora muchas de las funciones de estas versiones anteriores. El hecho de incorporarlas no es un error en sí, lo malo es que estas funciones tienen su equivalente en el modelo de objetos del framework, y si seguimos usando estas funciones ‘antiguas’ no aprenderemos las nuevas, y el día en que debamos trabajar con otro lenguaje del Framework (que no tiene porque ser C#, hay unos cuantos más :-P) nos encontraremos con que estamos usando funciones propias de VB y no conoceremos su equivalente.

ObjectExplorer

Por ejemplo, en lugar de llamar a la función Len para averiguar el número de caracteres de una cadena, es mejor usar el método Lenght de la clase String, lo mismo para Trim(), y todavía es más flagrante con Mid(), que equivale al método SubString del objeto String:

Dim n As Integer = Len(DateTime.Now.ToLongDateString)    'NO
Dim n As Integer = DateTime.Now.ToLongDateString.Lenght  'SI


No son pocos los esfuerzos de muchos compañeros, fantásticos programadores como Jorge Serrano o Harvey Triana para eliminar esta librería de nuestras aplicaciones, de modo que la recomendación siempre acaba siendo “no la uses, no la mires, haz como si no estuviera…”. Por cierto, os recomiendo una lectura de ambos artículos.
10) Hay más, y no se por cual decidirme…

Hay muchas otras cosas que se quedan en el tintero, porque algunas de ellas son demasiado largas (como el manejo de eventos), y otras no son precisamente de uso diario, como la ejecución de código no seguro (unsafe). Pero estaremos de acuerdo en que la mayoría de las novedades aparecen primero para C# (inicializadores de colecciones, propiedades autogeneradas, soporte para expresiones lambda ‘de verdad’, etc.) e incluso los compiladores de C# del proyecto MoNo van siempre por delante de los de VB. Aunque este último punto reconozco que no es demasiado importante… o sí?

En fin, vaya chapa me ha salido! Pero por lo menos ahora tengo una lista de cosas para cuando me pregunten “¿porque te gusta más C# que VB?”.

Un saludo desde Andorra,

Comments

22 Responsesso far

  1. anonymous dice:
    23 diciembre, 2008 a las 8:32 pm

    que és ésto?
    }
    }
    }

    ah:

    End Sub
    End Class
    End Namespace

    Responder
  2. anonymous dice:
    23 diciembre, 2008 a las 10:16 pm

    Para el -2- espérate a VB10; parece que por fín lo han resuelto.. 😉

    Responder
  3. mrubino dice:
    23 diciembre, 2008 a las 10:49 pm

    Buen post Luis, yo soy de los tuyos. Si puedo elegir siempre elijo c#.

    Saludos

    Responder
  4. julio dice:
    24 diciembre, 2008 a las 11:44 am

    Hola Lluis

    Desde el 98 al 2004 estuve trabajando en C exclusivamente. Antes de esta fecha en Quick Basic, y despues de este período en VB6 y VB.net

    Para desarrollos tipo «Driver» y similares donde la optimización y rendimiento son «críticos» he de decir que C y sus derivados (c++, c#) son quizás ideales (pero traicioneros, por 1 byte todo se viene abajo, quien haya desarrollado en C sabe a que me refiero) pero para el resto del software del mundo mundial, por ejemplo de ERP he de decir que desarrollar en C es matar moscas a cañonazos, que digo, ¡¡ A misiles intercontinentales!!! es como dar misa en hebreo o fregar Madrid con un cepillo de dientes, la productivad se ve muy seriamente afectada

    En la medida de lo posible trataré por siempre de evitar ese lenguaje y similares (OBSERVA QUE DIGO TRATATARE DE EVITAR) por que en este mundo ya sabes que no se pouede decir «nunca jamás» pero mientras siga al frente de un equipo de desarrollo que tenga presente la productividad y no necesite de desarrollos tipo driver evitaré que usemos C#.

    Es una humilde opinión.

    Responder
  5. lfranco dice:
    24 diciembre, 2008 a las 12:04 pm

    @cerebrado: jejeje… pero fíjate que en el primer punto me quejo de esto precisamente: No me gusta tanto End, de hecho hace mucho tiempo que no miro un código y me pregunto «¿que cierra esta llave?». Por otro lado el editor te lo dice simplemente haciendo click en ella (sombrea).

    @Toni: Es a lo que me refiero, VB siempre está una versión por detrás.

    @Marc: Lo sé. Supongo que es cuestión de gustos… ¿buen gusto? 😀

    @Julio: Coincido contigo con lo de C y C++, pero no me pongas a C# en el mismo saco porque no lo está. Yo empecé con VB 3.0 en 1994, cuando nos encontrábamos inmersos en un desarrollo bastante bestia en C++ (Borland 3.1). Por aquel entonces mi postura fue la misma: Desarrollar con C++ un producto así era matar moscas a cañonazos, por lo que sugerí hacer el grueso del desarrollo con VB y sólo algunas partes con C++ (tuvimos que esperar a la 4.0 y los OCXs). Si diriges un equipo seguro que intentas que todo tu equipo trabaje de forma parecida y un poco estricta (strict on + intentar no usar Microsoft.VisualBasic), y si te fijas usar VB de este modo es muy per que muy parecido a usar C#… es cuestión de aprovechar la base de conocimiento que tengas. Si tu equipo ya conoce VB pues a desarrollar con él, pero hacerlo en C# es muy facil.

    Un saludo a todos!!!

    L

    Responder
  6. julio dice:
    24 diciembre, 2008 a las 12:18 pm

    Haciendo acto de humildad decir una cosa que se me escapaba, VB.NET incorpora cosas buenas de C, incluso de una manera «magistral» encapsula y disfraza pero eso si facilitandolo mucho el uso de punteros con las «referencias», etc…etc… vaya que las cosas no son ni blanco ni negro leñe!!!!!

    Responder
  7. etomas dice:
    24 diciembre, 2008 a las 12:33 pm

    @Julio
    Lo que comentas con las referencias de VB.NET con respecto a los punteros de C++ es cierto, pero C# tiene exactamente lo mismo. Tampoco hay punteros en C# (salvo código unsafe) y en general en ningún lenguaje en .NET, puesto que si uno quiere tener garbage collector automático las referencias son mucho mejor compañeras de viaje que los punteros. Poner C# al mismo saco que C/C++ y en un saco distinto a VB.NET no es lógico: C# está mucho más cerca de VB.NET (por filosofía y prestaciones) que a C/C++.

    C# NO es un derivado de C… solo coge prestado su «estilo» sintáctico.

    Saludos!

    Responder
  8. rcorral dice:
    25 diciembre, 2008 a las 7:06 pm

    Yo no puedo vivir sin las cadenas verbatim
    http://geeks.ms/blogs/rcorral/archive/2007/11/27/rompe-tus-cadenas.aspx

    Tiré millones de líneas en VB pre .Net pero tengo que decir que prefiero la sintaxis de la familia C y que C# me parece más coherente y cohesiónado que VB.Net.

    Responder
  9. anonymous dice:
    28 diciembre, 2008 a las 4:08 pm

    PingBack desde 10 Cosas que hace C# mejor que Visual Basic (Lluis Franco) « Blog – Elvis Cortijo

    Responder
  10. anonymous dice:
    28 diciembre, 2008 a las 11:03 pm

    Es interesante el artículo y es lógico que haya discrepancias. En mi equipo de trabajo, migramos en su momento del Basic y C++ a .NET. Para homogeneizar el equipo de trabajo, tuvimos que decidirnos por C# ó VB. Aunque la mayoría del equipo había trabajado con Basic, en general coincidíamos en que la sintaxis del C# es más eficiente y más legible. Además, como el lenguaje Basic y VB.Net tienen muy poco en común, el conocimiento anterior de Basic era poco aprovechable. Es más, es que no queríamos que se hicieran las cosas como se hacían antes en Basic. El equipo de desarrollo está formado por gente con experiencia y todo el mundo se adaptó rápidamente y se quedó muy contento con el cambio a C#. De hecho hay gente que necesita mantener código antiguo de Basic, y nos comentan que les cuesta volver a la sintaxis ‘verbose’ del Basic ( con el problema adicional de que el Basic antiguo es muy limitado ).
    En resumen, creo que C# no es matar moscas a cañonazos, sino que es un lenguaje excelente y conciso.

    Responder
  11. anonymous dice:
    29 diciembre, 2008 a las 6:51 pm

    Sin entrar en polemica, se puede usar C# para desarrollar en GNU/Linux (http://www.mono-project.com/CSharp_Compiler) y en el caso de VisualBasic (http://www.mono-project.com/Visual_Basic) todavia tiene sus detalles.

    Saludos

    Responder
  12. anonymous dice:
    29 diciembre, 2008 a las 9:09 pm

    la verdad VB sera siempre un lenguaje mas facil y sencillo de implementar. C# es muy buen lenguaje….pero como decia una seccion del articulo …todo lo extra que tiene VB que segun algunos es para estobar….en realidad es para ACLARAR y HACER ENTENDIBLE el codigo….y si hablamos de aplicaciones de NEGOCIOS ….no de juegos, fbonaccis y otras tonterias….entonces VB sera siempre mejor.

    Responder
  13. anonymous dice:
    30 diciembre, 2008 a las 8:29 am

    Pues yo hace años que no toco un editor de programacion, pero hasta donde me quedé C es de lo mejorcito que hay; ademas, es lo que se usa para programar uno de los mejores sistemas operativos(linux, en mi opión), no?

    Responder
  14. lfranco dice:
    30 diciembre, 2008 a las 8:59 am

    Hola chicos,
    Gracias por el debate, siempre se agradece…

    Sólo un apunte: En todo momento hablo de que con C# me siento más cómodo que con VB, no digo que uno sea mejor que otro (aunque lo piense :-P).

    Saludos,

    Responder
  15. anonymous dice:
    31 diciembre, 2008 a las 5:25 am

    ‘VB
    using (connection)

    connection.Open()

    End Using

    //C#
    using (connection)
    {
    connection.Open();
    }

    4 a 3, GO VB.Net GO!!! 😀
    Salu2

    Responder
  16. anonymous dice:
    2 enero, 2009 a las 12:22 am

    Si profundizamos en modelamiento, especificación, fluidez de código, y otros avatares más. Tenemos que concluir que no hay ninguna razón, salvo sentimental, que para escoger VB.NET sobre C#”.

    Responder
  17. anonymous dice:
    2 enero, 2009 a las 5:07 am

    ‘VB

    using (connection)
    connection.Open()
    End Using

    //C#

    using (connection)
    {
    connection.Open();
    }

    44 chars vs 38 chars 🙂 C# wins

    Responder
  18. anonymous dice:
    2 enero, 2009 a las 6:39 am

    Excelente argumentación del maestro Lluis Franco (MVP Visual Developer) sobre la ventaja de C# sobre Visual Basic, basado en 10 caracteristicas descritas con ejemplos. Imperdible como todos sus los articulos:

    Responder
  19. anonymous dice:
    2 enero, 2009 a las 8:43 pm

    Johnny ha opinado:

    ‘VB

    using (connection)

    connection.Open()

    End Using

    //C#

    using (connection)

    {

    connection.Open();

    }

    4 a 3, GO VB.Net GO!!! 😀

    Salu2

    No te late mas asi:

    using (connection) { connection.Open(); }

    😀

    Responder
  20. anonymous dice:
    20 enero, 2009 a las 10:09 am

    Estoy de acuerdo con lo relatado.

    Sobre esto quisiera comentar si es posible
    [Unificar for ¡ foreach¡]

    Responder
  21. anonymous dice:
    30 enero, 2009 a las 6:16 pm

    MsgBox «Observa este» & vbCrLf & «texto que ocupa » &
    vbCrLf & «varias líneas» &vbCrLf & «que tal», , «Título»

    Microsoft.VisualBasic.Constants;
    y hay mas un lenguaje solo es la herramienta para plasmar la creatividad de un mundo interior !SALUDOS!

    Responder
  22. anonymous dice:
    18 febrero, 2009 a las 8:36 pm

    La ventaja del viejo VB6 es que puedes hacer una aplicación monousuario para windows en tres patadas (muy útil para aplicaciones para electrónica) y permite jalar dlls hechas en Borland C++ (prefiero mis Dlls en Borland C++).
    Pero si debo migrarme a .Net he escogido el C#. Me marean tantas llaves, pero la declaración de variables y el uso de clases es una belleza.
    Extraño los punteros, pero no extraño los errores de acceso a memoria dinámica.

    Responder

Responder a etomas Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

← Previous Post Next Post →

Tags

async Back best practices

Entradas recientes

  • Video de mi charla en la #dotNetSpain2016
  • I’m back. Miss me?
  • Office365 actualizado a 2013 para nuevas suscripciones
  • Serializar listas genéricas en aplicaciones WinRT
  • [TPL] Problemas de concurrencia

Comentarios recientes

  • Darling Chavez en Tip: Mostrar objetos relacionados en DevExpress GridControl
  • Alexander en [TPL] Problemas de concurrencia
  • cristinakity en Funciones escalares en TSQL, JOINS, CROSS APPLY, y la madre que parió al topo.
  • cristinakity en Funciones escalares en TSQL, JOINS, CROSS APPLY, y la madre que parió al topo.
  • anonymous en HowTo: Crear una pantalla de inicio (splash screen)

Archivos

  • marzo 2016
  • marzo 2013
  • octubre 2012
  • septiembre 2012
  • agosto 2012
  • febrero 2012
  • diciembre 2011
  • noviembre 2011
  • octubre 2011
  • septiembre 2011
  • agosto 2011
  • junio 2011
  • mayo 2011
  • abril 2011
  • febrero 2011
  • enero 2011
  • diciembre 2010
  • noviembre 2010
  • octubre 2010
  • agosto 2010
  • julio 2010
  • marzo 2010
  • febrero 2010
  • enero 2010
  • diciembre 2009
  • noviembre 2009
  • octubre 2009
  • septiembre 2009
  • agosto 2009
  • julio 2009
  • junio 2009
  • mayo 2009
  • abril 2009
  • marzo 2009
  • febrero 2009
  • enero 2009
  • diciembre 2008
  • noviembre 2008
  • octubre 2008
  • septiembre 2008
  • agosto 2008
  • julio 2008
  • junio 2008
  • mayo 2008
  • abril 2008
  • marzo 2008
  • febrero 2008
  • enero 2008
  • diciembre 2007
  • noviembre 2007
  • octubre 2007
  • septiembre 2007
  • agosto 2007
  • abril 2007
  • febrero 2007
  • enero 2007

Categorías

  • .NET
  • C#
  • Channel9
  • Evento
  • Personal
  • Videos

Meta

  • Acceder
  • RSS de las entradas
  • RSS de los comentarios
  • WordPress.org
About This Site

A cras tincidunt, ut tellus et. Gravida scel ipsum sed iaculis, nunc non nam. Placerat sed phase llus, purus purus elit.

Archives Widget
  • January 2010
  • December 2009
  • November 2009
  • October 2009
Categories
  • Entertainment
  • Technology
  • Sports & Recreation
  • Jobs & Lifestyle
Search
  • facebook
  • twitter
  • rss

Powered by WordPress  |  Business Directory by InkThemes.

This site uses cookies: Find out more.