Documente Academic
Documente Profesional
Documente Cultură
Un lenguaje que hubiese sido ideal utilizar para estos menesteres es Java, pero
debido a problemas con la empresa creadora del mismo -Sun-, Microsoft ha tenido
que desarrollar un nuevo lenguaje que añadiese a las ya probadas virtudes de
Java las modificaciones que Microsoft tenía pensado añadirle para mejorarlo aún
más y hacerlo un lenguaje orientado al desarrollo de componentes. En resumen,
C# es un lenguaje de programación que toma las mejores características de
lenguajes preexistentes como Visual Basic, Java o C++ y las combina en uno solo.
El hecho de ser relativamente reciente no implica que sea inmaduro, pues
Microsoft ha escrito la mayor parte de la BCL usándolo, por lo que su compilador
es el más depurado y optimizado de los incluidos en el .NET Framework SDK
Con la idea de que los programadores más experimentados puedan obtener una
visión general del lenguaje, a continuación se recoge de manera resumida las
principales características de C# Alguna de las características aquí señaladas no
son exactamente propias del lenguaje sino de la plataforma .NET en general. Sin
embargo, también se comentan aquí también en tanto que tienen repercusión
directa en el lenguaje, aunque se indicará explícitamente cuáles son este tipo de
características cada vez que se toquen:
Sencillez: C# elimina muchos elementos que otros lenguajes incluyen y que son
innecesarios en .NET.
Por otro lado y a diferencia de Java, en C# se ha optado por hacer que todos los
métodos sean por defecto sellados y que los redefinibles hayan de marcarse con
el modificador virtual (como en C++), lo que permite evitar errores derivados de
redefiniciones accidentales. Además, un efecto secundario de esto es que las
llamadas a los métodos serán más eficientes por defecto al no tenerse que
buscar en la tabla de funciones virtuales la implementación de los mismos a la
que se ha de llamar. Otro efecto secundario es que permite que las llamadas a
los métodos virtuales se puedan hacer más eficientemente al contribuir a que el
tamaño de dicha tabla se reduzca.
Console.ReadKey();
<tipoVariable> <nombreVariable>;
Una variable puede ser definida dentro de una definición de clase, en cuyo
caso se correspondería con el tipo de miembro que hasta ahora hemos
denominado campo. También puede definirse como un variable local a un
método, que es una variable definida dentro del código del método a la que
sólo puede accederse desde dentro de dicho código. Otra posibilidad es
definirla como parámetro de un método, que son variables que almacenan los
valores de llamada al método y que, al igual que las variables locales, sólo
puede ser accedida desde código ubicado dentro del método. El siguiente
ejemplo muestra cómo definir variables de todos estos casos:
class A
{
int x, z; int y;
Persona p;
En este ejemplo las variables x, z e y son campos de tipo int, mientras que p
es una variable local de tipo Persona y a y b son parámetros de tipo string.
Como se muestra en el ejemplo, si un método toma varios parámetros las
definiciones de éstos se separan mediante comas (carácter ,), y si queremos
definir varios campos o variables locales (no válido para parámetros) de un
mismo tipo podemos incluirlos en una misma definición incluyendo en
<nombreVariable> sus nombres separados por comas.
TIPOS DE DATOS.
Los tipos de datos básicos son ciertos tipos de datos tan comúnmente
utilizados en la escritura de aplicaciones que en C# se ha incluido una sintaxis
especial para tratarlos. Por ejemplo, para representar números enteros de 32
bits con signo se utiliza el tipo de dato System.Int32 definido en la BCL,
aunque a la hora de crear un objeto a de este tipo que represente el valor 2 se
usa la siguiente sintaxis:
System.Int32 a = 2;
Como se ve, no se utiliza el operador new para crear objeto System.Int32, sino
que directamente se indica el literal que representa el valor a crear, con lo que
la sintaxis necesaria para crear entero de este tipo se reduce
considerablemente. Es más, dado lo frecuente que es el uso de este tipo
también se ha predefinido en C# el alias int para el mismo, por lo que la
definición de variable anterior queda así de compacta:
int a = 2;
Pese a su sintaxis especial, en C# los tipos básicos son tipos del mismo nivel
que cualquier otro tipo del lenguaje. Es decir, heredan de System.Object y
pueden ser tratados como objetos de dicha clase por cualquier método que
espere un System.Object, lo que es muy útil para el diseño de rutinas genéricas
que admitan parámetros de cualquier tipo y es una ventaja importante de C#
frente a lenguajes similares como Java donde los tipos básicos no son
considerados objetos.
El valor que por defecto se da a los campos de tipos básicos consiste en poner a
cero todo el área de memoria que ocupen. Esto se traduce en que los campos de
tipos básicos numéricos se inicializan por defecto con el valor 0, los de tipo bool lo
hacen con false, los de tipo char con ‘\u0000’, y los de tipo string y object con
null.
CONSTANTES
Todos los elementos de un array son del mismo tipo. Se dice entonces que ése
es el tipo del array. Así, se habla por ejemplo, de un array de enteros o un array
de string, etc, dependiendo de que los elementos del array sean de un tipo o de
otro.
Un array puede tener más de una dimensión. Por cada dimensión de un array se
necesita un nivel de índices para acceder a sus elementos.
ARRAYS MULTIDIMENSIONALES
Los arrays multidimensionales tiene dos tipos: los arrays rectangulares y los
arrays dentados.
Ejemplo:
ARRAYS UNIDIMENSIONALES
Los arreglos unidimensionales son colecciones lineales, que nos pueden ayudar a
representar una secuencia numérica, letras del alfabeto o un cromosoma dentro de
un programa de algoritmos genéticos, entre muchas otras.
Ejemplo:
ARRAYS DE ARRAY
Estos son arrays que pueden contener otros arrays. ¿Y para qué queremos meter
un array dentro de otro? ¿No nos basta con los arrays multidimensionales? Pues
realmente podría bastarnos, en efecto, pero habría ocasiones en las que
tendríamos que hacer bastantes cabriolas con el código por no usar los arrays de
arrays. Imaginemos un programa en el que el usuario tiene que manejar
simultáneamente múltiples objetos de distintas clases derivadas de una clase
base, por ejemplo, triángulos y cuadrados derivados de la clase figura. Si
solamente pudiéramos usar arrays unidimensionales o multidimensionales
tendríamos que declarar un array distinto para cada tipo de objeto (uno para
triángulos y otro para cuadrados). La dificultad viene ahora: ¿Qué ocurre si hay
que redibujar todos los objetos, ya sean cuadrados o triángulos? Evidentemente,
habría que escribir un bucle para cada uno de los arrays para poder invocar los
métodos redibujar de cada uno de los elementos. Sin embargo, si metemos todos
los arrays dentro de un array de arrays nos bastaría con escribir un par de bucles
anidados para recorrer todos los objetos y dejar el resto en manos del
polimorfismo. Ciertamente, aún no hemos estudiado a fondo ninguno de los
mecanismos de la herencia. No obstante, con lo que sabemos hasta ahora,
podemos poner un ejemplo sobre los arrays de arrays, aunque probablemente no
se aprecie realmente la ventaja. Veamos el ejemplo, y luego lo comentamos. Eso
sí, presta especial atención a la sintaxis, tanto en la declaración como en las
instanciaciones:
Ejemplo:
{
arrayDeBytes [x] = new byte[4];
establecidas.