Anda di halaman 1dari 29

C#

C# (pronunciado si sharp en ingls) es un lenguaje de programacin orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que despus fue aprobado como un estndar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los lenguajes de programacin diseados para la infraestructura de lenguaje comn. Su sintaxis bsica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes. El nombre C Sharp fue inspirado por la notacin musical, donde '#' (sostenido, en ingls sharp) indica que la nota (C es la nota do en ingls) es un semitono ms alta, sugiriendo que C# es superior a C/C++. Adems, el signo '#' se compone de cuatro signos '+' pegados.[1] Aunque C# forma parte de la plataforma .NET, sta es una API, mientras que C# es un lenguaje de programacin independiente diseado para generar programas sobre dicha plataforma. Ya existe un compilador implementado que provee el marco Mono - DotGNU, el cual genera programas para distintas plataformas como Windows, Unix, Android, iOS, Windows Phone, Mac OS y GNU/Linux.

Historia
Durante el desarrollo de la plataforma .NET, las bibliotecas de clases fueron escritas originalmente usando un sistema de cdigo gestionado llamado Simple Managed C (SMC). En enero de 1999, Anders Hejlsberg form un equipo con la misin de desarrollar un nuevo lenguaje de programacin llamado Cool (C orientado a objetos). Este nombre tuvo que ser cambiado debido a problemas de marca, pasando a llamarse C#. [2] La biblioteca de clases de la plataforma .NET fue migrada entonces al nuevo lenguaje. Hejlsberg lider el proyecto de desarrollo de C#. Anteriormente, ya particip en el desarrollo de otros lenguajes como Turbo Pascal, J++ y Embarcadero Delphi.

Tipos de datos
C# contiene dos categoras generales de tipos de datos integrados: tipos de valor y tipos de referencia. El trmino tipo de valor indica que esos tipos contienen directamente sus valores. Tipos para definir nmeros enteros:

Tipo de datos de enteros Tipo


byte

Equivalente BCL
System.Byte

Tamao 8-bit byte) 8-bit byte) (1(1-

Rango 0 a 255 -128 a 127

Significado Entero sin signo Entero signo con

sbyte System.SByte

short

System.Int16

16-bit (2-32.768 a 32.767 byte) 16-bit (20 a 65.535 byte) 32-bit (4-2.147.483.648 a 2.147.483.647 byte) 32-bit (40 a 4.294.967.295 byte) 64-bit (8- -9.223.372.036.854.775.808 byte) 9.223.372.036.854.775.807 64-bit (80 a 18.446.744.073.709.551.615 byte)

Entero corto con signo Entero corto sin signo Entero medio con signo Entero medio sin signo a Entero largo con signo Entero largo sin signo

ushort System.UInt16

int

System.Int32

uint

System.UInt32

long

System.Int64

ulong System.UInt64

Los tipos de coma flotante pueden representar nmeros con componentes fraccionales. Existen dos clases de tipos de coma flotante: float y double. El tipo double es el ms utilizado porque muchas funciones matemticas de la biblioteca de clases de C# usan valores double. Quiz, el tipo de coma flotante ms interesante de C# es decimal, dirigido

al uso de clculos monetarios. La aritmtica de coma flotante normal est sujeta a una variedad de errores de redondeo cuando se aplica a valores decimales. El tipo decimal elimina estos errores y puede representar hasta 28 lugares decimales.

Tipo de datos de coma flotante Tipo


float

Equivalente BCL
System.Single

Tamao 32-bit byte) 64-bit byte) (4-

Rango 1.401298E45 a 3.402823E+38

Significado Coma corto a Coma largo flotante flotante

double System.Double

(8- 4.94065645841246E324 1.79769313486232E+308

128-bit decimal System.Decimal (16-byte)

7.9228162514264337593543950335 Coma flotante a monetario +7.9228162514264337593543950335

Los caracteres en C# no tienen un tamao de 8 bits como en otros muchos lenguajes de programacin, sino que usa un tamao de 16 bits llamado Unicode al cual se le llama char. No existen conversiones automticas de tipo entero a char.

Tipo de datos de caracteres Tipo Equivalente BCL Tamao


char System.Char

Rango

Significado

16-bit (2-byte) '\u0000' a '\uFFFF' Carcter unicode

Para los tipos de datos lgicos no existen conversiones automticas de tipo entero a bool. Tipo de datos lgicos Tipo Equivalente BCL Tamao
bool System.Boolean

Rango

Significado

8-bit (1-byte) true o false Verdadero o falso

Literales
En ocasiones, resulta ms sencillo usar un sistema numrico en base 16 en lugar de 10, para tal caso C# permite especificar nmeros enteros en formato hexadecimal, y se define anteponiendo 0x, por ejemplo: 0xFF, que equivale a 255 en decimal. C# tiene caracteres denominados secuencias de escape para facilitar la escritura con el teclado de smbolos que carecen de representacin visual. C#, al igual que C++, define un tipo de cadena de caracteres. Dentro de la cadena de caracteres se pueden usar secuencias de escape. Una cadena de caracteres puede iniciarse con el smbolo @ seguido por una cadena entre comillas ("), en tal caso, las secuencias de escape no tienen efecto, y adems la cadena puede ocupar dos o ms lneas. Enteros decimal hexadecimal entero largo Coma flotante float double decimal Caracteres char Cadenas String Alerta (timbre) Retroceso Avance de pgina Nueva lnea Retorno de carro
"Hello, world"; "C:\\Windows\\", @"C:\Windows\" 'a', 'Z', '\u0231' 23.5F, 23.5f; 1.72E3F, 1.72E3f, 1.72e3F, 1.72e3f 23.5, 23.5D, 23.5d, 1.72E3, 1.72E3D 9.95M 245, [0..9]+ 0xF5, 0x[0..9, A..F, a..f]+ 12L

entero largo sin signo 654UL

Secuencias de escape
\a \b \f \n \r

Tabulador horizontal \t

Tabulador vertical Nulo Comilla simple Comilla doble Barra inversa

\v \0 \' \" \\

Variables
Las variables son identificadores asociados a valores. Se declaran indicando el tipo de dato que almacenar y su identificador. Un identificador puede:

empezar por "_". contener caracteres Unicode en maysculas y minsculas (sensible a maysculas y minsculas).

Un identificador no puede:

empezar por un nmero. empezar por un smbolo, ni aunque sea una palabra clave. contener ms de 511 caracteres.

Declarar una variable:


int miNumero; // Declaramos la variable, pero no la inicializamos con ningn valor.

Para asignar un valor a una variable, se indica el identificador de la misma, seguido del smbolo igual (=) y el valor que queremos que almacene:
miNumero = 5; // Asignamos el valor '5'.

Tambin se puede declarar y asignar un valor al mismo tiempo:


int miNumero = 5; // Declaramos la variable, y asignamos el valor '5'.

Las conversiones de tipo de variables en C# se representan en la siguiente tabla en donde la fila es el origen y la columna el destino.

Leyenda Rojo Conversin incompatible (I).

Verde Conversin automtica o implcita (A). Azul Conversin explcita (E).

Conversiones de tipo de datos byte sbyte short ushort int uint long ulong float double decimal char bool byte sbyte short ushort int uint long ulong float E E E E E E E E E E E E E E E E E E I E E E E E E E E E I E E E E E E E A I E E E E E E E E E E E A A I I E E E E A I E E E A I E E A I E A I A I I E A A A E E A A A E A A A A E A A A A A A A A A A A A E E E E E E E E E E E E E E E E E A E E E E E E E E E E E E E E E E E E I I I I I I I I I I I I I I I

double E decimal E char bool


E I

Toda conversin implcita no ocasiona prdida de informacin, truncamientos o redondeos. Es posible (mas no siempre ocurre) que en una conversin explcita haya prdida de informacin, truncamientos o redondeos. En toda conversin implcita el tipo de dato destino es mayor que el tipo de dato origen. La conversin explcita se realiza indicando el tipo de dato al que se quiere convertir entre parntesis, seguido del valor:

long valor = 123; // Conversin implcita long valor = (long)123; // Conversin explcita

Adems de realizarse dentro de una asignacin, las conversiones de tipos tambin tienen lugar dentro de una expresin, pues en cada operacin ambos operandos deben de ser del mismo tipo. Si la conversin es del tipo implcito se efecta el siguiente algoritmo en dicho orden:

1. 2. 3. 4. 5. 6.

Si un operando es decimal, el otro operando se transforma a decimal. Si un operando es double, el otro operando se transforma a double. Si un operando es float, el otro operando se transforma a float. Si un operando es ulong, el otro operando se transforma a ulong. Si un operando es long, el otro operando se transforma a long. Si un operando es uint, y si el otro operando es de tipo sbyte, short o int, los dos se transforman a long. 7. Si un operando es uint, el otro operando se transforma a uint. 8. Si no es ninguno de los casos anteriores, los dos operandos se transforman a int.

Constantes
Las constantes son valores inmutables, y por tanto no se pueden cambiar.
const

Cuando se declara una constante con la palabra clave const, tambin se debe asignar el valor. Tras esto, la constante queda bloqueada y no se puede cambiar. Son implcitamente estticas (static).
const double PI = 3.1415; readonly

A diferencia de const, no requiere que se asigne el valor al mismo tiempo que se declara. Pueden ser miembros de la instancia o miembros estticos de la clase ( static).
readonly double E; E = 2.71828;

Operadores
Categora Aritmtico Lgico y a nivel de bits Concatenacin Desplazamiento Relacional Operadores
+-*/%

^ ! ~ && ||
+

Incremento, decremento ++ -<< >> == != < > <= >=

Asignacin Acceso a miembro Indexacin Conversin Condicional Creacin de objeto Informacin de tipo

= ^= <<= >>=
. [] () ?: new as is sizeof typeof

Los operadores aritmticos funcionan igual que en C y C++. El resultado de los operadores relacionales y lgicos es un valor de tipo bool. Los operadores de cortocircuito evalan el segundo operando solo cuando es necesario. Los operadores a nivel de bits no se pueden aplicar a tipos bool, float, double o decimal.

Instrucciones de control
if-else if (i == 2) { // ... } else if (i == 3) { // ... } else { // ... } switch switch (i) { case 1: ... break; case 2: case 3: ... break; default: ... break; }

for for (int i = 0; i < 10; i++) { // ... } while while (i < 10) { // ... } do-while do { // ... } while (true); foreach foreach (char c in charList) { // ... }

Las instrucciones if-else, for, while, do-while, switch, return, break, continue son, bsicamente, iguales que en C, C++ y Java. La instruccin foreach, al igual que en Java, realiza un ciclo a travs de los elementos de una matriz o coleccin. En este ciclo se recorre la coleccin y la variable recibe un elemento de dicha coleccin en cada iteracin. La instruccin goto se sigue utilizando en C# a pesar de la polmica sobre su uso.

Mtodos

Todo mtodo debe ser parte de una clase, no existen mtodos globales (funciones). Por defecto, los parmetros se pasan por valor. (Notese que las listas y otras colecciones son variables por referencia (referencias al espacio reservado para esa lista en la pila) y que se pasa por valor al mtodo la referencia , pero el espacio reservado para la lista es comn, por lo que si elimina un elemento lo hace tambin de la original) El modificador ref fuerza a pasar los parmetros por referencia en vez de pasarlos por valor y obliga a inicializar la variable antes de pasar el parmetro.

El modificador out es similar al modificador ref, con la diferencia de que no se obliga a inicializar la variable antes de pasar el parmetro. Cuando ref y out modifican un parmetro de referencia, la propia referencia se pasa por referencia. El modificador params sirve para definir un nmero variable de argumentos los cuales se implementan como una matriz. Un mtodo debe tener como mximo un nico parmetro params y ste debe ser el ltimo. Un mtodo puede devolver cualquier tipo de dato, incluyendo tipos de clase. Ya que en C# las matrices se implementan como objetos, un mtodo tambin puede devolver una matriz (algo que se diferencia de C++ en que las matrices no son vlidas como tipos de valores devueltos). C# implementa sobrecarga de mtodos, dos o ms mtodos pueden tener el mismo nombre siempre y cuando se diferencien por sus parmetros. El mtodo Main es un mtodo especial al cual se refiere el punto de partida del programa.

ref void PassRef(ref int x) { if (x == 2) { x = 10; } } int z = 0; PassRef(ref z); out void PassOut(out int x) { x = 2; } int z; PassOut(out z); params int MaxVal(char c, params int[] nums) { // ... } int a = 1;

MaxVal('a', 23, 3, a, -12); // El primer parmetro es obligatorio, seguidamente se pueden poner tantos nmeros enteros como se quiera Sobrecarga de mtodos int Suma(int x, int y) { return x + y; } int Suma(int x, int y, int z) { return x + y + z; } Suma(1, 2); // Llamar al primer mtodo. Suma(1, 2, 3); // Llamar al segundo mtodo. Main public static void Main(string[] args) { // ... }

Matrices

En C# las matrices se implementan como objetos. Los ndices de las matrices comienzan en 0. Ya que C# implementa las matrices como objetos, cada matriz tiene una propiedad Length que contiene el nmero de elementos que puede alojar o tiene alojados.

Declarar una matriz:


int[] intArray = new int[5];

Declarar e inicializar una matriz (el tamao de la matriz se puede omitir):


int[] intArray = new int[] {1, 2, 3, 4, 5};

Acceder a un elemento:
intArray[2]; // Retornar el valor '3'

Declarar una matriz multidimensional:


int[,] intMultiArray = new int[3, 2]; // 3 filas y 2 columnas

Declarar e inicializar una matriz multidimensional (el tamao de la matriz se puede omitir):
int[,] intMultiArray = new int[,] { {1, 2}, {3, 4}, {5, 6} };

Acceder a un elemento de una matriz multidimensional:


intMultiArray[2, 0]; // Retornar el valor '5'

Ms informacin en: Tutorial de matrices (C#) (en ingls).

Clases y objetos

Una variable de objeto de cierta clase no almacena los valores del objeto sino su referencia (al igual que Java). El operador de asignacin no copia los valores de un objeto, sino la referencia al mismo (al igual que Java). Un constructor tiene el mismo nombre que su clase y es sintcticamente similar a un mtodo. Un constructor no devuelve ningn valor (ni siquiera void). Al igual que los mtodos, los constructores tambin pueden ser sobrecargados. Si no se especifica un constructor en una clase, se usa uno por defecto que consiste en asignar a todas las variables el valor 0, null o false segn corresponda. Cuando un objeto no es referenciado por ninguna variable, el recolector de basura ejecuta el destructor de dicha clase y libera la memoria utilizada. El destructor de una clase no se llama cuando un objeto sale del mbito. Todos los destructores se llamarn antes de que finalice un programa. La palabra clave this es una referencia al mismo objeto en el cual se usa. La palabra clave base es una referencia a la clase padre del objeto en la que se usa (por defecto, Object). La palabra clave static hace que un miembro pertenezca a una clase en vez de pertenecer a objetos de dicha clase. Se puede tener acceso a dicho miembro antes de que se cree cualquier objeto de su clase y sin referencias a un objeto. Un mtodo static no tiene una referencia this. Un mtodo static puede llamar slo a otros mtodos static. Un mtodo static slo debe tener acceso directamente a datos static. Un constructor static se usa para inicializar atributos que se aplican a una clase en lugar de aplicarse a una instancia. C# permite la sobrecarga de operadores (+, -, *, etc.) con la palabra clave operator.

Al comparar objetos (==, !=, <, >, <=, >=) se comprueba si hacen referencia al mismo objeto.

Declarar una clase:


class Clase { }

Iniciar una clase (tambin llamado crear un objeto de la clase o instanciar una clase):
Clase c = new Clase();

Constructor (como si fuera un mtodo, pero con el nombre de su clase):


class Clase { Clase() { // ... } }

Destructor (como si fuera un mtodo, precedido del smbolo '~'):


class Clase { ~Clase() { // ... } } this: class Clase { int i = 1; Clase() { this.Arrancar(); // Llamar al mtodo 'Arrancar' del objeto } void Arrancar() { // ... } } static: class Clase { static int i = 1; } Clase.i; // Retornar el valor '1'. No hace falta crear un objeto, ya que al ser 'static', pertenece a la clase.

operator: class Clase { static int operator +(int x, int y) { // Sobrecarga el operador '+' // ... } static int operator -(int x, int y) { // Sobrecarga el operador '-' // ... } static int operator int(byte x) { // Sobrecarga la conversin de tipo 'byte' a 'int' // ... } }

Comparacin de objetos:
class Clase { } Clase c1 = new Clase(); Clase c2 = new Clase(); bool b = c1 == c2; // Retornar 'false', ya que son dos objetos distintos

Cadenas de caracteres

El tipo de dato para las cadenas de caracteres es string. Realmente la palabra clave string es un alias de la clase System.String de la plataforma .NET. En C# las cadenas son objetos y no una matriz de caracteres; an as, se puede obtener un carcter arbitrario de una cadena por medio de su ndice (mas no modificarlo). Las cadenas son inmutables, una vez creadas no se pueden modificar, solo se pueden copiar total o parcialmente. El operador == determina si dos referencias hacen referencia al mismo objeto, pero al usar dicho operador con dos variables tipo string se prueba la igualdad del contenido de las cadenas y no su referencia. Sin embargo, con el resto de los operadores relacionales, como < y >=, s se comparan las referencias. Se pueden concatenar (unir) dos cadenas mediante el operador +. Las cadenas se pueden usar en las instrucciones switch.

Declarar una cadena de caracteres (como si fuera una variable de un tipo de dato como int o double):
string texto = "Cadena de caracteres"; string texto = new System.String("Cadena de caracteres"); // Equivalente al anterior

Longitud de una cadena:


string texto = "Cadena de caracteres"; int i = texto.Length; // Retornar '20'

Comparar dos cadenas:


bool b = "texto" == "texto"; // Retornar 'true', ya que ambas cadenas contienen "texto"

Concatenar cadenas:
string texto = "Cadena de" + " caracteres"; // Ntese el espacio antes de "caracteres", si no se pusiera, aparecera junto: "decaracteres"

La clase System.String, y una instancia de la misma, string, poseen algunos mtodos para trabajar con cadenas, como:
static string Copy(string str):

devuelve una copia de str.

string texto1 = "abc"; string texto2 = "xyz"; string texto2 = System.String.Copy(texto1); // 'texto2' ahora contiene "abc" int CompareTo(string str):

devuelve menor que cero si la cadena que llama es menor que str, mayor que cero si la cadena que llama es mayor que str, y cero si las cadenas son iguales.
string texto = "abc"; int i = texto.CompareTo("abc"); // Retornar '0' int IndexOf(string str):

devuelve el ndice de la primera coincidencia de la subcadena especificada en str, o -1 en caso de error.


string texto = "abcdefabcdef"; int i = texto.IndexOf("e"); // Retornar '4' int j = texto.IndexOf("def"); // Retornar '3', que es donde se encuentra el carcter 'd', seguido de 'e' y 'f'

int LastIndexOf(string str):

devuelve el ndice de la ltima coincidencia de la subcadena especificada en str, o -1 en caso de error.


string texto = "abcdefabcdef"; int i = texto.LastIndexOf("e"); // Retornar '10' int j = texto.LastIndexOf("def"); // Retornar '9', que es donde se encuentra el ltimo carcter 'd', seguido de 'e' y 'f' string ToLower:

devuelve una copia de la cadena en minsculas.

string texto = "ABC"; string texto = texto.ToLower(); // Retornar "abc" string ToUpper:

devuelve una copia de la cadena en maysculas.

string texto = "abc"; string texto = texto.ToUpper(); // Retornar "ABC" string Substring:

devuelve una subcadena, indicando la posicin de inicio y la longitud que se

desea.
string texto = "Cadena de caracteres"; string texto = texto.Substring(10, 8); // Retornar "caracter"

Ms informacin en: String (Clase) (System) (en ingls).

Ejemplos
Ejemplo bsico "Hola mundo":
using System; public class Ejemplo { public static void Main(string[] args) { Console.WriteLine("Hola mundo"); } }

Suma y concatenacin:
using System; public class Ejemplo {

public static void Main(string[] args) { int x = 10; int y = 20; Console.WriteLine("El resultado es: " + (x + y)); // Imprimir en pantalla: "El resultado es: 30" } }

Uso de clases, mtodos, propiedades y sobrecarga:


using System; public class Coche { private int numPuertas; public int NumPuertas { get { return this.numPuertas; } set { this.numPuertas = value; // 'value' es una variable que se asigna automticamente al asignar un valor a la propiedad, para poder trabajar con dicho valor. } } public Coche(int numPuertas) { this.NumPuertas = numPuertas; } // Sobrecarga: si se instancia la clase sin indicar ningn parmetro, se inicializa 'numPuertas' con el valor '2' public Coche() : this(2) { } } public class Ejemplo { public static void Main(string[] args) { Coche coche = new Coche(); // Se usa el segundo constructor coche.NumPuertas = 4; Console.WriteLine("El nmero de puertas es: " + coche.NumPuertas); } }

Compiladores
En la actualidad existen los siguientes compiladores para el lenguaje C#:

Microsoft .NET Framework 2.0 (SDK) incluye un compilador de C#, pero no un IDE. Microsoft Visual Studio, IDE por excelencia de este lenguaje. SharpDevelop, IDE libre para C# bajo licencia GNU LGPL, con una interfaz muy similar a Microsoft Visual Studio. Mono, es una implementacin con licencia GNU GPL de todo el entorno .NET desarrollado por Novell. Como parte de esta implementacin se incluye un compilador de C#. Delphi 2006, de Borland Software Corporation. DotGNU Portable.NET, de la Free Software Foundation.

Metas del diseo del lenguaje


El estndar ECMA-334 lista las siguientes metas en el diseo para C#:

Lenguaje de programacin orientado a objetos simple, moderno y de propsito general. Inclusin de principios de ingeniera de software tales como revisin estricta de los tipos de datos, revisin de lmites de vectores, deteccin de intentos de usar variables no inicializadas, y recoleccin de basura automtica. Capacidad para desarrollar componentes de software que se puedan usar en ambientes distribuidos. Portabilidad del cdigo fuente. Fcil migracin del programador al nuevo lenguaje, especialmente para programadores familiarizados con C, C++ y Java. Soporte para internacionalizacin. Adecuacin para escribir aplicaciones de cualquier tamao: desde las ms grandes y sofisticadas como sistemas operativos hasta las ms pequeas funciones. Aplicaciones econmicas en cuanto a memoria y procesado.

Visual Basic
Visual Basic es un lenguaje de programacin dirigido por eventos, desarrollado por Alan Cooper para Microsoft. Este lenguaje de programacin es un dialecto de BASIC, con importantes agregados. Su primera versin fue presentada en 1991, con la intencin de simplificar la programacin utilizando un ambiente de desarrollo completamente grfico que facilitara la creacin de interfaces grficas y, en cierta medida, tambin la programacin misma. La ltima versin fue la 6, liberada en 1998, para la que Microsoft extendi el soporte hasta marzo de 2008. En 2001 Microsoft propuso abandonar el desarrollo basado en la API Win32 y pasar a un framework o marco comn de libreras, independiente de la versin del sistema operativo, .NET Framework, a travs de Visual Basic .NET (y otros lenguajes como C Sharp (C#) de fcil transicin de cdigo entre ellos); fue el sucesor de Visual Basic 6. Aunque Visual Basic es de propsito general, tambin provee facilidades para el desarrollo de aplicaciones de bases de datos usando Data Access Objects, Remote Data Objects, o ActiveX Data Objects. Visual Basic contiene un entorno de desarrollo integrado o IDE que integra editor de textos para edicin del cdigo fuente, un depurador, un compilador (y enlazador) y un editor de interfaces grficas o GUI.

Historia
Todas las versiones de Visual Basic para Windows son muy conocidas, aunque la Microsoft Visual Basic 1.0 desarrollada para el sistema operativo MS-DOS (ediciones Profesional y Estndar), que data de 1992, fue menos difundida. Esta provea un entorno que, aunque en modo texto, inclua un diseador de formularios en el que se podan arrastrar y soltar distintos controles. La ltima versin que slo generaba aplicaciones de 16 bits, fue la 3.0, y ella no inclua una biblioteca detallada de componentes para toda clase de usos. Durante la transicin de los sistemas Windows 3.11 a Windows 95, en 1995, hizo su aparicin la versin 4.0 de Visual Basic; sta poda generar programas tanto de 16 como de 32 bits, a partir del mismo cdigo fuente, aunque a costa de un gran aumento en el tamao de los archivos

necesarios en tiempo de ejecucin ("runtime"). Adems, se sustituyeron los controles denominados VBX por los nuevos OCX. Con la siguiente versin, la 5.0, se estuvo a punto de implementar por primera vez la posibilidad de compilar a cdigo nativo, obteniendo una mejora de rendimiento considerable. Tanto esa como la sucesora 6.0 soportaban ciertas caractersticas propias de los lenguajes orientados a objetos, pero carecan de algunas importantes, tales como herencia y sobrecarga; pero, de hecho, no fue pensado como lenguaje orientado a objetos. La versin 6.0, que puede generar cdigo ejecutable directo en 32 bits, continua aun utilizndose masivamente, y es compatible con las ltimas versiones de los sistemas Windows, como Vista y Windows 7. Visual Basic evolucion para integrar la plataforma .NET, all perdi su propia identidad como lenguaje nico adquirible, pasando a integrar un paquete de productos, llamado precisamente Microsoft .NET; dentro de ese paquete o framework se encuentra el nuevo y llamado Visual Basic .NET, que trabaja sobre el entorno Microsoft Visual Studio; esta nueva versin del lenguaje posee profundas diferencias en la forma de programar, respecto de Visual Basic 6, pero gran semejanza en su sintaxis bsica. Cabe mencionar que, aunque fue menos conocido, se desarroll tambin una versin gratuita de Visual Basic 5.0, orientada al desarrollo de controles y componentes, su nombre especfico era Microsoft Visual Basic 5.0 Control Creation Edition (Visual Basic 5 CCE). Tambin hubo versiones orientadas al desarrollo de aplicaciones para dispositivos mviles basados en Windows CE y Pocket PC, conocidas como Embedded (Visual Basic).

Versiones

Visual Basic 1.0 para Windows se liber en Mayo de 1991. Visual Basic 1.0 para MS-DOS fue liberada en Septiembre de 1992. Poco popular, este lenguaje no era compatible con Visual Basic para Windows, ya que constitua en realidad la siguiente versin de hijoslos compiladores BASIC vigentes para DOS, denominados QuickBASIC y BASIC PDS (Profesional Development System). Usaba una interfase de texto, con caracteres ASCII extendidos que daban la apariencia de una interfaz grfica. Visual Basic 2.0 fue liberado en Noviembre de 1992. Vena en versiones Standard y Professional. El entorno de programacin era ms fcil de usar que el anterior, y su velocidad de proceso fue mejorada. En particular, los formularios se convirtieron en objetos instanciables, sentando as los conceptos fundamentales para mdulos de clase, que ms tarde se ofreceran en la versin 4. Visual Basic 3.0 sali al mercado en verano de 1993, en versiones Standard y Profesional, inclua la versin 1.1 de Microsoft Jet Database Engine que permita acceso a bases de datos Access.

Visual Basic 4.0, surgida en agosto de 1995 fue la primera versin que generaba aplicaciones tanto de 16 como de 32 bits para Windows. Haba incompatibilidades entre las distintas realeases de esta versin que causaban fallas de instalacin y problemas de operacin. Mientras las anteriores utilizaban controles VBX, con la 4.0 se comenzaron a utilizar controles OLE en archivos OCX, que ms tarde se llamaran controles ActiveX.

En febrero de 1997, Microsoft lanz Visual Basic 5.0, versin generaba programas de 32 bits exclusivamente. Los programadores que aun preferan desarrollar aplicaciones en 16 bits deban necesariamente utilizar VB 4.0, siendo transportables en cdigo fuente a VB 5.0 y viceversa. En la versin 5 se tena la posibilidad de crear controles personalizados, tambin permita compilar a cdigo ejecutable nativo de Windows, logrando con ello incrementar la velocidad de ejecucin de los programas generados, ms notablemente en los de clculo.

Visual Basic 6, salido a mediados de 1998, muy mejorado, increment el nmero de reas[1] e incluy la posibilidad de crear aplicaciones basadas en Web. Microsoft retir el soporte de VB6 en Marzo de 2008, pero a pesar de ello las aplicaciones que genera son compatibles con plataformas ms modernas, como Windows Vista, Windows Server 2008 y Windows 7.[2] [3]

El soporte estndar para Microsoft Visual Basic 6.0 finaliz el 31 de marzo de 2005, pero el extendido termin en marzo de 2008.[4] La comunidad de usuarios de Visual Basic expres su grave preocupacin y se firm una peticin para mantener el producto vivo.[5] Microsoft se ha negado hasta el momento a cambiar su posicin sobre el asunto. Irnicamente, en esa poca (2005), se da a conocer que el software antiespa ofrecido por Microsoft, "Microsoft AntiSpyware" (parte de la GIANT Company Software), fue codificado en Visual Basic 6.0; su posterior sustituto, Windows Defender, fue reescrito en cdigo C++.[6]

Caractersticas
Los compiladores de Visual Basic generan cdigo que requiere una o ms libreras de enlace dinmico para que funcione, conocidas comnmente como DLL (sigla en ingls de dynamic-link library); en algunos casos reside en el archivo llamado MSVBVMxy.DLL (siglas de "MicroSoft Visual Basic Virtual Machine x.y", donde x.y es la versin) y en otros en VBRUNXXX.DLL ("Visual Basic Runtime X.XX"). Estas bibliotecas DLL proveen las funciones bsicas implementadas en el lenguaje, conteniendo rutinas en cdigo ejecutable que son cargadas bajo demanda en tiempo de ejecucin. Adems de las esenciales, existe un gran nmero de bibliotecas del tipo DLL con variedad de funciones, tales como las que facilitan el acceso a la mayora de las funciones del sistema operativo o las que proveen medios para la integracin con otras aplicaciones. Dentro del mismo Entorno de desarrollo integrado (IDE) de Visual Basic se puede ejecutar el programa que est desarrollndose, es decir en modo intrprete (en realidad pseudocompila el programa muy rpidamente y luego lo ejecuta, simulando la funcin de un intrprete puro). Desde ese entorno tambin se puede generar el archivo en cdigo ejecutable (exe); ese programa as generado en disco puede luego ser ejecutado sin requerir del ambiente de programacin (incluso en modo stand alone), aunque si ser necesario que las libreras DLL requeridas por la aplicacin desarrollada se encuentren tambin instaladas en el sistema para posibilitar su ejecucin. El propio Visual Basic provee soporte para empaquetado y distribucin, es decir, permite generar un mdulo instalador que contiene al programa ejecutable y a las bibliotecas DLL necesarias para su ejecucin. Con ese mdulo la aplicacin desarrollada se distribuye y puede ser instalada en cualquier equipo (que tenga un sistema operativo compatible). As como bibliotecas DLL, hay numerosas aplicaciones desarrolladas por terceros que permiten disponer de variadas y mltiples funciones, incluso mejoras para el propio Visual Basic; las hay tambin para el empaquetado y distribucin, y hasta para otorgar mayor funcionalidad al entorno de programacin (IDE). Entorno de desarrollo Existe un nico entorno de desarrollo para Visual Basic, desarrollado por Microsoft: Microsoft Visual Basic x.0, correspondientes a versiones desde la 1.0 hasta la 6.0, (con respectivas diferencias entre versiones del lenguaje). El entorno de desarrollo es muy similar al de otros lenguajes. Realizando una instalacin tpica del producto las caractersticas bsicas se presentan de la siguiente forma:

En la parte superior aparecen tres elementos, en este orden: la barra de ttulo donde figura el nombre del proyecto en curso y su estado (diseo o ejecucin); la barra de men con 13 opciones desplegables y una barra de herramientas; esta ultima se puede personalizar, posibilitando la inclusin de prcticamente la totalidad de los comandos del IDE. En la parte central, cubriendo la franja de mayor rea, se encuentra el espacio de trabajo, ste incluye y muestra las ventanas del proyecto, las vistas del cdigo fuente de los mdulos, los objetos y los controles que contienen las ventanas de la aplicacin y el panel de controles.

El panel de controles, que aunque es mvil, normalmente est ubicado a la derecha, por defecto cuenta con los siguientes controles: PictureBox: Caja de Imgenes Label: Etiqueta TextBox: Caja de texto Frame: Marco CommandButton: Botn de comando CheckBox: Casilla de verificacin OptionButton: Botn de opcin ComboBox: Lista desplegable ListBox: Lista HScrollBar: Barra de desplazamiento horizontal VScrollBar: Barra de desplazamiento vertical Timer: Temporizador DriveListBox: Lista de unidades de disco DirListBox: Lista de directorios FileListBox: Lista de archivos Shape: Figura Line: Lnea Image: Imagen Data: Conexin a origen de datos OLE: Contenedor de documentos embebidos compatibles con Object Linking and Embedding

Adems de los listados, se pueden agregar todo tipo de controles de terceros, y hay una gran cantidad de ellos que se proveen con el propio Visual Basic 6.0. Los controles vienen embebidos dentro de archivos con extensin OCX.

Las ventanas de proyecto, aunque mviles, se encuentran en el panel lateral derecho y contienen dos vistas principales: El Explorador de Proyectos, que muestra todos los elementos que componen el proyecto o grupos de proyectos (formularios, interfaz de controles, mdulos de cdigo, mdulos de clase, etc.) El Panel de propiedades, donde se muestran todos los atributos de los objetos, controles, formularios, informacin de mdulos clase, entre muchos otros.

La Ventana inmediato, por defecto se encuentra en la parte inferior, aunque puede no estar visible (se presiona las teclas Ctrl+G, en ese caso, para mostrar la ventana). Esta ventana resulta una herramienta muy til a la hora de depurar el programa o bien para realizar pruebas rpidas, ya que permite imprimir mensajes de texto desde el cdigo y ejecutar sentencias y comandos simples inmediatamente(solo sentencias que se puedan escribir en una sola lnea). Por ejemplo, de la aplicacin en curso, se puede consultar el valor de una variable o llamar a un mtodo declarado en el mdulo que se est depurando. Se puede ejecutar cdigo "al vuelo", por ejemplo con sentencias como:
? sqr(2)

siendo el signo ? un reemplazo natural del comando Print en Basic, al ejecutar la sentencia se mostrara por pantalla el valor de la raz cuadrada de dos. Tambin se pueden usar variables del propio programa, o sentencias de cdigo tales como:
Msgbox "Prueba de cuadro de mensaje de error.", vbCritical, "Titulo del mensaje"

A la hora de la depuracin puede ser til para consultar el valor de variables del programa, o el cdigo de error como:
? Err.Number

Objetos y eventos
Se designa como objeto a cualquier elemento, por ejemplo, un formulario, una imagen, un control, tal como una caja de texto; a su vez, los objetos tienen propiedades, que en el caso de la caja de texto una es la propiedad "text" que se encarga de contener el texto que aparecer en la caja. A los objetos se les puede asociar eventos. Un evento es la ocurrencia de un suceso, comnmente la accin que realiza el usuario sobre el objeto, que como resultado puede, por ejemplo, provocar un cambio en alguna propiedad de un objeto. Por ejemplo: Visual Basic tiene un evento llamado KeyPress, que ocurre cuando el

usuario presiona una tecla; ese evento se puede asociar a la caja de texto, y en l definir (por programacin) que accin se tomar cuando se oprima una tecla. En sntesis, un objeto posee propiedades, responde a eventos y puede ejecutar mtodos asociados a l. Algunos eventos comunes definidos en Visual Basic son:

Click: ocurre cuando se presiona y suelta un botn del mouse sobre un objeto. DblClick: ocurre cuando se presiona y suelta dos veces un botn del mouse sobre un objeto. DragDrop: ocurre al arrastrar y soltar un determinado objeto con el mouse. DragOver: ocurre si una operacin de arrastrar y soltar est en curso. GotFocus: ocurre cuando un objeto recibe el control o foco, ya sea mediante una accin del usuario, como hacer click en un objeto ventana, o cambiando el foco de objeto desde el programa, mediante el mtodo SetFocus. LostFocus: Contrario al anterior, este evento ocurre cuando el objeto pierde el enfoque, sea mediante accin del usuario o efectuado desde la aplicacin. KeyDown: ocurre cuando el usuario mantiene presionada una tecla. KeyUp: Ocurre cuando el usuario deja de presionar una tecla. Este evento sucede precisamente al terminar el evento KeyDown. KeyPress: ocurre como cuando se presiona y suelta una tecla. MouseDown: ocurre cuando el usuario presiona un botn del Mouse. MouseUp: se produce cuando el usuario suelta el botn del mouse. MouseMove: este evento ocurre mientras el usuario mueve o desplaza el puntero del mouse sobre un objeto.

Imagnese un auto como un objeto, el auto tiene diversas propiedades como color, modelo, etc. Algunas con slo 2 posibles valores, como encendido y apagado, incluso otras que a simple vista no se ven como podra ser la cantidad de gasolina. Para definir el color de este objeto Auto, segn visual Basic, se hara de la siguiente manera:
Auto.color = rojo

y para definirle un evento podra ser como el siguiente ejemplo:


Sub girarllave( ) Auto.encendido=true end sub.

Ejemplo de cdigo
El siguiente fragmento de cdigo muestra un cuadro de mensaje, en una ventana, que dice "Hola mundo!":
Private Sub Form_Load() ' Ejecuta un simple box de mensaje que dice "Hola mundo!" MsgBox ("Hola mundo!") End Sub

Ventajas

Posee una curva de aprendizaje muy rpida. Integra el diseo e implementacin de formularios de Windows. Permite usar con facilidad la plataforma de los sistemas Windows, dado que tiene acceso prcticamente total a la API de Windows, incluidas libreras actuales. Es uno de los lenguajes de uso ms extendido, por lo que resulta fcil encontrar informacin, documentacin y fuentes para los proyectos. Fcilmente extensible mediante libreras DLL y componentes ActiveX de otros lenguajes. Posibilita aadir soporte para ejecucin de scripts, VBScript o JScript, en las aplicaciones mediante Microsoft Script Control. Tiene acceso a la API multimedia de DirectX (versiones 7 y 8). Tambin est disponible, de forma no oficial, un componente para trabajar con OpenGL 1.1.[7] Existe una versin, VBA, integrada en las aplicaciones de Microsoft Office, tanto Windows como Mac, que permite programar macros para extender y automatizar funcionalidades en documentos, hojas de clculo, bases de datos (access). Si bien permite desarrollar grandes y complejas aplicaciones, tambin provee un entorno adecuado para realizar pequeos prototipos rpidos.

Inconvenientes
Las crticas hechas en las ediciones de Visual Basic anteriores a VB.NET son variadas,[8] se citan entre ellas:

Problema de versionado asociado con varias libreras runtime DLL, conocido como DLL Hell Pobre soporte para programacin orientada a objetos[9] Incapacidad para crear aplicaciones multihilo, sin tener que recurrir a llamadas de la API de Windows. Dependencia de complejas y frgiles entradas de registro COM[10]

La capacidad de utilizar controles en un solo formulario es muy limitada en comparacin a otras herramientas. DLL Hell DB, Libro Programando en Visual Basic,2002

Alternativas multiplataforma o externas a Windows


Existen mltiples alternativas dentro y fuera de Windows que intentan imitar a este lenguaje y su mecnica de desarrollo. El ms conocido y popular es Gambas:

Gambas es un proyecto libre para implementar programacin visual con Basic en GNU/Linux. Est derivado principalmente de Visual Basic, adaptndose a partir de su lenguaje y su entorno de desarrollo, para implementar su propia variante, parcialmente compatible con Visual Basic, aportando y enriqueciendo con las oportunidades que brinda GNU/Linux.

Otras opciones conocidas son Real Basic o PureBasic que permiten desarrollar bajo Windows, Linux, Mac OS e independientemente, PureBasic permite desarrollar tambin para Amiga OS. A diferencia de Gambas, estas son soluciones comerciales y no son libres.