You are on page 1of 13

Lenguaje de programacin C#

Los primeros rumores de que Microsoft estaba desarrollando un nuevo lenguaje de


programacin surgieron en 1998, haciendo referencia a un lenguaje que entonces
llamaban COOL y que decan era muy similar a Java. En junio de 2000, Microsoft despej
todas las dudas liberando la especificacin de un nuevo lenguaje llamado C#. A esto le
sigui rpidamente la primera versin de prueba del entorno de desarrollo estndar
(SDK) .NET, que inclua un compilador de C#. El nuevo lenguaje estaba diseado por
Anders Hejlsberg ( creador de Turbo Pascal y arquitecto de Delphi ), Scott Wiltamuth y
Peter Golde. Entonces describieron el lenguaje como "...simple, moderno, orientado a
objetos, de tipado seguro y con una fuerte herencia de C/C++".
Una muestra de esta nueva tecnologa es el nuevo lenguaje de programacin C#. Este
nuevo lenguaje orientado a objetos con nfasis en Internet se basa en las lecciones
aprendidas de los lenguajes C, C++, Java y Visual Basic. Por ello se trata de un lenguaje
que combina todas las cualidades que se pueden esperar de un lenguaje moderno
(orientacin a objetos, gestin automtica de memoria, etc.) a la vez que proporciona un
gran rendimiento.

La plataforma .NET
La plataforma .NET es una plataforma de desarrollo de software con especial nfasis en el
desarrollo rpido de aplicaciones, la independencia de lenguaje y la transparencia a travs
de redes.
La plataforma consta de las siguientes partes:

Un conjunto de lenguajes de programacin (C#, J#, JScript, C++ gestionado, Visual


Basic.NET, y otros proyectos independientes).

Un conjunto de herramientas de desarrollo (entre ellos Monodevelop o Visual


Studio.NET de Microsoft )

Una libreria de clases amplia y comn para todos los lenguajes.

Un sistema de ejecucion de Lenguaje Comn. (CLR).

Un conjunto de servidores .NET

Un conjunto de servicios .NET

Dispositivos electrnicos con soporte .NET (PDA,Celulares, etc)

Los puntos fuertes de la plataforma son:

Independencia de lenguaje

Todos los lenguajes que conformen con los estndares .NET, sin importar cual,
podrn interoperar entre s de forma totalmente transparente, las clases podrn ser
heredadas entre unos lenguajes y otros, y se podr disfrutar de polimorfismo entre
lenguajes. Por ejemplo, si yo tengo una clase en C#, esta clase podr ser
heredada y utilizada en Visual Basic o JScript o cualquier lenguaje .NET. Todo esto
es posible por medio de una de las caractersticas de .NET llamado Common Type
System (CTS). Tambin tiene la cualidad de que se pueden incluir ms lenguajes a
la plataforma. En la actualidad existen proyectos independientes de incluir PHP,
Python, Ada y otros lenguajes en la plataforma.

Librera de clases comn

Ms de 4000 clases, objetos y mtodos incluidos en la plataforma .NET estn


disponibles para todos los lenguajes.

Multiplataforma

Cuando un programa es compilado, no es compilado en un archivo ejecutable sino


en un lenguaje intermedio llamado Lenguaje Intermedio (IL) el cual podr ser
ejecutado por el CLR (Common Language Runtime) en la plataforma en que el
CLR est disponible (hasta el da de hoy Microsoft solamente tiene un CLR para
los sistemas operativos Windows, pero el proyecto Mono (www.mono-project.com)
y dotGNU (www.dotGNU.org) han puesto a disposicin un CLR para GNU/Linux,
MacOS y muchas otras plataformas). Los sistemas operativos Windows XP o
superiores incluyen el CLR nativamente y SuSE Linux 9.3 o superior planea
incorporar el CLR (Mono) en su distribucin lo que quiere decir que un programa
.NET podr ser compilado y ejecutado en cualquiera de estas plataformas, o en
cualquier plataforma que incluya un CLR.

El CLR compilar estos archivos IL nuevamente en cdigo de mquina en un


proceso que se conoce como JIT (justo a tiempo) el cual se ejecutar cuando se
requiera. Este proceso producir cdigo de mquina bien eficiente que se
reutilizar si es que hubiera cdigo que se repitiera, haciendo que los programas
sean ejecutados muy eficientemente.

El CRL

Windows Forms, Web Forms, Web Services

La plataforma .NET incluye un conjunto de clases especial para datos y XML que
son la base de 3 tecnologas claves: Servicios Web (Web Services), Web Forms, y
Windows Forms los cuales son poderosas herramientas para la creacin de
aplicaciones tanto para la plataforma como para el Web.

Estandarizacin

Adems de los mritos tcnicos, una de las razones del xito de la plataforma
.NET ha sido por el proceso de estandarizacin que Microsoft ha seguido (y que ha
sorprendido a ms de uno). Microsoft, en lugar de reservarse todos los derechos
sobre el lenguaje y la plataforma, ha publicado las especificaciones del lenguaje y
de la plataforma, que han sido posteriormente revisadas y ratificadas por la
Asociacin Europea de Fabricantes de Computadoras (ECMA). Esta especificacin
(que se puede descargar libremente de Internet) permite la implementacin del
lenguaje C# y de la plataforma .NET por terceros, incluso en entornos distintos de
Windows.

Un resmen introductorio sobre el lenguaje C#[editar]


El lenguaje es muy sencillo, sigue el mismo patrn de los lenguajes de programacin
modernos. Incluye un amplio soporte de estructuras, componentes, programacin
orientada a objetos, manipulacin de errores, recoleccin de basura, etc, que es construido
sobre los principios de C++ y Java. Como sabris, las clases son la base de los lenguajes
de programacin orientados a objetos, lo cual permite extender el lenguaje a un mejor
modelo para solucionar problemas. C# contiene las herramientas para definir nuevas
clases, sus mtodos y propiedades, al igual que la sencilla habilidad para implementar
encapsulacin, herencia y polimorfismo, que son los tres pilares de la programacin
orientada a objetos. C# tiene un nuevo estilo de documentacin XML que se incorpora a lo
largo de la aplicacin, lo que simplifica la documentacin en lnea de clases y mtodos. C#
soporta tambin interfaces, una forma de estipular los servicios requeridos de una clase.
Las clases en C# pueden heredar de un padre pero puede implementar varias interfaces.
C# tambin provee soporte para estructuras, un concepto el cual ha cambiado
signifivamente desde C++. Una estructura es un tipo restringido que no exige tanto del
sistema operativo como una clase. Una estructura no puede heredar ni dar herencias de
clases pero puede implementar una interfaz. C# provee caractersticas de componentes
orientados, como propiedades, eventos y construcciones declaradas (tambin llamados
atributos). La programacin orientada a componentes es soportada por el CLR. C# provee

soporte para acceder directamente a la memoria usando el estilo de punteros de C++ y


mucho ms.

C# frente a Java[editar]
C# y Java son lenguajes similares, de sintaxis basada en C/C++, orientados a objetos, y
ambos incluyen las caractersticas ms importantes de los lenguajes modernos, como son
la gestin automtica de memoria y la compilacin a cdigo intermedio. Pero por supuesto,
tambin hay diferencias.
Una de las diferencias ms importantes es que C# es mucho ms cercano a C++ en
cuanto a diseo se refiere. C# toma casi todos sus operadores, palabras reservadas y
expresiones directamente de C++. Tambin se han mantenido algunas caractersticas que
en Java se han desestimado. Por ejemplo, la posibilidad de trabajar directamente con
direcciones de memoria. Si bien tanto Java como .NET proporcionan gestin automtica
de memoria, en C# es posible usar lo que se denomina "cdigo no seguro". Cuando se usa
cdigo no seguro en C# es posible operar con punteros de forma muy similar a como se
hara en C/C++, pero el cdigo que utiliza punteros se queda marcado como no seguro y
no se ejecuta en entornos en los que no tiene permisos.

C# frente a C++[editar]
Puesto que C# se ejecuta en una mquina virtual, sta se hace cargo de la gestin de
memoria y por lo tanto el uso de punteros es mucho menos importante en C# que en C++.
C# tambin es mucho ms orientado a objetos, hasta el punto de que todos los tipos
usados derivan en ltima instancia el tipo 'object'. Adems, muchos tipos se usan de forma
distinta. Por ejemplo, en C# se comprueban los lmites de los arrays antes de usarlos,
evitando as que se pueda escribir pasado el final del vector.
Al igual que Java, C# renuncia a la idea de herencia mltiple de clases presente en C++.
Sin embargo, referido a clases, C# implementa 'propiedades' del tipo de las que existen en
Visual Basic, y los mtodos de las clases son accedidos mediante '.' en lugar de '::'.

Por qu C#?[editar]
La plataforma .NET acepta varios lenguajes. Por ahora, C#, Visual Basic, C++ gestionado,
Nemerle, FORTRAN, Java, Python, etc. , y con capacidad para aceptar prcticamente
cualquier lenguaje. Entonces la pregunta es, porqu se eligi C# en lugar de cualquier
otro lenguaje?.
La razn fundamental es que C# se dise para la plataforma .NET y es capaz de utilizar
todo su potencial. Tambin es cierto que es un lenguaje "limpio" en el sentido de que al no
tener que proporcionar compatibilidad hacia atrs se ha tenido ms libertad en el diseo y
se ha puesto especial hincapi en la simplicidad. Por ejemplo, en C# hay un tipo de clase y
siempre se le aplica el recolector de basura mientras que en C++ gestionado hay dos tipos
de clases, una a la que se aplica el recolector y otra a la que no.

https://msdn.microsoft.com/es-es/library/67ef8sbd.aspx

MAIN
El mtodo Main es el punto de entrada de una aplicacin de consola de C# o una
aplicacin para Windows. (Las bibliotecas y los servicios no requieren un
mtodo Main como punto de entrada.) Cuando se inicia la aplicacin, el
mtodo Main es el primer mtodo que se invoca.
En un programa de C#, slo puede haber un punto de entrada. Si tiene ms de una
clase con un mtodo Main, debe compilar el programa con la opcin del
compilador /mainpara especificar qu mtodo Main se va a utilizar como punto de
entrada

Tipos
C# es un lenguaje fuertemente tipado. Todas las variables y constantes tienen un
tipo, al igual que toda expresin que da como resultado un valor. Cada firma de
mtodo especifica un tipo para cada parmetro de entrada y para el valor
devuelto. La biblioteca de clases .NET Framework define un conjunto de tipos
numricos integrados y tipos ms complejos que representan una amplia variedad
de construcciones lgicas, como el sistema de archivos, conexiones de red,
colecciones y matrices de objetos y fechas. Un programa tpico de C# usa los tipos
de la biblioteca de clases, as como tipos definidos por el usuario que modelan los
conceptos especficos del dominio problemtico del programa.
La informacin almacenada en un tipo puede incluir lo siguiente:

El espacio de almacenamiento que requiere una variable del tipo.

Los valores mximo y mnimo que puede representar.

Los miembros (mtodos, campos, eventos, etc.) que contiene.

El tipo base del que hereda.

La ubicacin donde se asignar la memoria para las variables en tiempo de


ejecucin.

Los tipos de operaciones permitidos.

Tipos integrados
C# proporciona un conjunto estndar de tipos numricos integrados para
representar enteros, valores de punto flotante, expresiones Boolean, caracteres de
texto, valores decimales y otros tipos de datos. Tambin hay

tipos object y string integrados. Dichos tipos estn disponibles para que los utilice
en cualquier programa de C#. Para obtener ms informacin sobre los tipos
integrados, vea Tablas de referencia para tipos (Referencia de C#).

Tipo de C#

Tipo de .NET Framework

bool

System.Boolean

byte

System.Byte

sbyte

System.SByte

char

System.Char

decimal

System.Decimal

double

System.Double

float

System.Single

int

System.Int32

uint

System.UInt32

Long

System.Int64

ulong

System.UInt64

object

System.Object

short

System.Int16

ushort

System.UInt16

string

System.String

Tipos personalizados
Las construcciones struct, class, interface y enum se utilizan para crear sus propios
tipos personalizados. La biblioteca de clases de .NET Framework en s es una
coleccin de tipos personalizados proporcionada por Microsoft que puede utilizar en
sus propias aplicaciones. De forma predeterminada, los tipos usados con mayor

frecuencia en la biblioteca de clases estn disponibles en cualquier programa de


C#. Otros solo estn disponibles cuando se agrega explcitamente una referencia
del proyecto al ensamblado en el que se definen. Una vez que el compilador incluye
una referencia al ensamblado, puede declarar variables (y constantes) de los tipos
declarados en dicho ensamblado en el cdigo fuente. Para obtener ms
informacin, vea Biblioteca de clases de .NET Framework.

Tipos de valor
Los tipos de valor se derivan de System::ValueType, que a su vez se deriva
de System::Object. Los tipos que se derivan de System::ValueType tienen un
comportamiento especial en CLR. Las variables de tipo de valor contienen
directamente sus valores, lo que significa que la memoria se asigna insertndola en
cualquier contexto en el que se declare la variable. En las variables de tipo de valor
no se produce una asignacin de memoria independiente en el montn ni una
sobrecarga de recoleccin de elementos no utilizados.
Hay dos categoras de tipos de valor: struct y enum.
Los tipos numricos integrados son structs con propiedades y mtodos a los que
puede tener acceso:
C#
// Static method on type Byte.
byte b = Byte.MaxValue;

C#
byte num = 0xA;
int i = 5;
char c = 'Z';
La palabra clave struct se usa para crear sus propios tipos de valor
personalizados. Normalmente, un struct se utiliza como contenedor de un pequeo
conjunto de variables relacionadas, como se muestra en el ejemplo siguiente:
C#
public struct CoOrds
{
public int x, y;
public CoOrds(int p1, int p2)
{
x = p1;
y = p2;
}
}

Tipos de referencia
Un tipo que se define como clase, delegado, matriz o interfaz es un tipo de
referencia. Al declarar una variable de un tipo de referencia en tiempo de ejecucin,
la variable contiene el valor null hasta que se crea explcitamente una instancia del

objeto mediante el operador new o se le asigna un objeto creado en otro lugar


mediante new, como se muestra en el siguiente ejemplo
C#
MyClass mc = new MyClass();
MyClass mc2 = mc;

Tipos de valores literales


En C#, los valores literales reciben un tipo del compilador. Para especificar el tipo de
un literal numrico, anexe una letra al final del nmero. Por ejemplo, para
especificar que el valor 4.56 debe tratarse como tipo flotante, anexe una "f" o "F"
despus del nmero: 4.56f. Si no se anexa ninguna letra, el compilador inferir un
tipo para el literal. Para obtener ms informacin sobre los tipos que pueden
especificarse con sufijos de letras, vea las pginas de referencia de los tipos
individuales en Tipos de valor (Referencia de C#).

Tipos genricos
Un tipo se puede declarar con uno o varios parmetros de tipo que actan como
marcador de posicin del tipo real (el tipo concreto) que proporcionar el cdigo
cliente al crear una instancia del tipo. Estos tipos se denominan tipos genricos. Por
ejemplo, el tipo de .NET Framework System.Collections.Generic::List<T> tiene un
parmetro de tipo al que, por convencin, se le asigna el nombre T.

Tipos implcitos, tipos annimos y tipos que


aceptan valores NULL
Como ya se ha mencionado anteriormente, puede indicar el tipo implcito de una
variable local (pero no de los miembros de clase) mediante la palabra clave var. La
variable sigue recibiendo un tipo en tiempo de compilacin, pero el tipo lo
proporciona el compilador. Para obtener ms informacin, vea Variables locales con
asignacin implcita de tipos (Gua de programacin de C#).
En algunos casos, es conveniente crear un tipo con nombre para conjuntos sencillos
de valores relacionados que no estn destinados a almacenarse o pasarse fuera de
los lmites del mtodo. Para este fin, puede crear tipos annimos. Para obtener ms
informacin, consulte Tipos annimos (Gua de programacin de C#).
Los tipos de valor normales no pueden tener el valor null. Sin embargo, puede crear
tipos de valor que acepten valores NULL si anexa ? despus del tipo. Por
ejemplo, int? es un tipo int que tambin puede tener el valor null. En CTS, los tipos
que aceptan valores NULL son instancias del tipo de struct
genrico System::Nullable<T>. Dichos tipos resultan especialmente tiles al pasar
datos desde y hacia bases de datos en las que los valores numricos pueden ser
null. Para obtener ms informacin, vea Tipos que aceptan valores NULL (Gua de
programacin de C#).

Matrices
Puede almacenar distintas variables del mismo tipo en una estructura de datos de
matriz. Para declarar una matriz especifique el tipo de sus elementos.

Informacin general sobre las matrices


Una matriz tiene las propiedades siguientes:

Una matriz puede ser unidimensional, multidimensional o escalonada.

El nmero de dimensiones y la longitud de cada dimensin se establecen


cuando se crea la instancia de la matriz. Estos valores no se pueden cambiar
durante la duracin de la instancia.

Los valores predeterminado de los elementos numricos de matriz se


establece en cero y el de los elementos de referencia se establece en null.

Una matriz escalonada es una matriz de matrices y por consiguiente sus


elementos son tipos de referencia y se inicializan en null.

Las matrices se indizan basadas en cero: una matriz con n elementos se


indiza desde 0 hasta n-1.

Los elementos de una matriz pueden ser de cualquier tipo, incluido el tipo
matriz.

Los tipos de matriz son tipos de referencia derivados del tipo base
abstracto Array. Puesto que este tipo
implementa IEnumerable e IEnumerable<T>, puede utilizar la
iteracin foreach en todas las matrices de C#.

Cadenas (Gua de
programacin de C#)
Visual Studio 2013
Otras versiones

Una cadena es un objeto de tipo String cuyo valor es texto. Internamente, el texto
se almacena como una coleccin secuencial de solo lectura de objetos Char. Al final

de una cadena de C# no hay un carcter null de terminacin; por lo tanto, una


cadena de C# puede contener cualquier nmero de caracteres null incrustados
('\0'). La propiedad Lengthde una cadena representa el nmero de objetos Char que
contiene, no el nmero de caracteres Unicode. Para obtener acceso a los puntos de
cdigo Unicode individuales de una cadena, utilice el objeto StringInfo.

string frente aSystem.String


En C#, la palabra clave string es un alias de String. Por lo
tanto, String y string son equivalentes y puede utilizar la convencin de
nomenclatura que prefiera. La clase Stringproporciona numerosos mtodos para
crear, manipular y comparar cadenas de forma segura. Adems, el lenguaje C#
sobrecarga algunos operadores para simplificar operaciones comunes de las
cadenas. Para obtener ms informacin sobre la palabra clave, vea string
(Referencia de C#). Para obtener ms informacin sobre el tipo y sus mtodos,
vea String.

Inmutabilidad de los objetos de cadena


Los objetos de cadena son inmutables, es decir, no pueden modificarse una vez
creados. Todos los mtodos String y los operadores de C# que parecen modificar
una cadena, en realidad devuelven los resultados en un nuevo objeto de cadena. En
el ejemplo siguiente, cuando el contenido de s1 y s2 se concatena para formar una
sola cadena, las dos cadenas originales no se modifican. El operador += crea una
nueva cadena que contiene el contenido combinado. Ese nuevo objeto se asigna a
la variable s1 y el objeto original asignado a s1 se libera para la recoleccin de
elementos no utilizados, ya que ninguna otra variable contiene una referencia a l.

Secuencias de escape de cadena


Secuencia de escape

Nombre del carcter

\'

Comilla simple

\"

Comilla doble

\\

Barra diagonal inversa

\0

Null

\a

Alerta

\b

Retroceso

\f

Avance de pgina

\n

Nueva lnea

\r

Retorno de carro

\t

Tabulacin horizontal

\U

Secuencia de escape Unicode para pares suplentes.

\u

Secuencia de escape Unicode

\v

Tabulacin vertical

\x

Secuencia de escape Unicode similar a "\u" a excepcin de la longitud v

Nota

En tiempo de compilacin, las cadenas textuales se convierten en cadenas normales con las mismas secue
textual en la ventana Inspeccin del depurador, ver los caracteres de escape agregados por el compilado
ejemplo, la cadena textual @"C:\files.txt" aparecer como "C:\\files.txt" en la ventana Inspeccin.

Cadenas, mtodos de extensin y LINQ


Dado que el tipo String implementa IEnumerable<T>, puede utilizar los mtodos de
extensin definidos en la clase Enumerable en las cadenas. Para evitar el desorden
visual, estos mtodos se excluyen de IntelliSense para el tipo String, pero estn
disponibles de todas formas. Tambin puede utilizar expresiones de consulta LINQ
en las cadenas. Para obtener ms informacin, vea LINQ y cadenas.

You might also like