Está en la página 1de 37

C# y la plataforma .

NET

Javier Jiménez Juárez

Lenguajes de Programación
Dra. Ana Lilia Laureano Cruces

Instituto de Investigaciones en Matemáticas Aplicadas y Sistemas


Universidad Nacional Autónoma de México
21 de octubre de 2004
¿Qué es C#?
Lenguaje de programación de
Microsoft
¿Evolución? de C++
Totalmente orientado a objetos
Seguridad en tipos
Polimorfismo
Sobrecarga de operadores y métodos
Herencia
2
¿Por qué y para qué?
Lenguaje sencillo pero robusto
Sencillez de Visual Basic
Poder de C++
Velocidad de
desarrollo
comparable con
IDEs de Borland
(Delphi, Builder)

3
¿Por qué y para qué?
Independencia de plataforma
.NET
Liberación de la especificación
MONO: Emulación en ambientes
Linux

4
¿Por qué y para qué?
Bondades
Seguridad de tipos
OO
Objetos <- Tipos básicos de datos
int Counter = 14;
Console.WriteLine( Counter.ToString() );

Administración automática de
memoria

5
¿Por qué y para qué?
Bondades...
Sintaxis simplificada: operadores de
referencia y namespaces:
., ->, :: sustituidos por ->
XML: ¿Comentarios? ¡Documentación!
COMponentes y componentes .NET
Integración con otros lenguajes .NET

6
¿Por qué y para qué?
Bondades...
Apuntadores: ¿Seguridad o no
seguridad?
¡Dinero! $$: VB .NET vs C#
Conclusión: Sistemas Windows y
arquitecturas soportadas bajo .NET

7
Plataforma .NET
Visión futura de Microsoft:
‘Cómputo distribuido’
Razones
Código reutilizable
“Funciona donde sea”
Proveedores de servicios

8
Plataforma .NET
Componentes
Definición de clases
CLR (Common Language Runtime) o
máquina virtual de MSIL*
Lenguajes
Visual Basic .NET
C#, puramente .NET
C++ administrado o Managed C++

*Microsoft Intermediate Language


9
C# vs. JAVA
Compilación a lenguaje intermedio
JAVA bytecode
Microsoft Intermediate Language (MSIL)
Más tipos primitivos en C#
Tipos enumerados: enumeration
Estructuras: struct
No existe herencia múltiple
Herencia a través de interfaces

10
C# vs. JAVA
Arreglos n-dimensionales
JAVA: Arreglos que son miembros de
otros arreglos
C#: Verdaderos arreglos
Polimorfismo implementado en
manera mas complicada que en
JAVA

11
C# vs. C++
Ausencia de encabezados
Administración automática de
memoria
Apuntadores: unsafe
Límites en arreglos
int != bool
switch
12
El lenguaje
Estructura básica de un programa
// A skeleton of a C# program
using System;
namespace MyNamespace1
{
class MyClass1
{…}
struct MyStruct
{…}
interface IMyInterface
{…}
namespace MyNamespace2
{…}
class MyClass2
{
public static void Main(string[] args)
{…}
}
}

13
El lenguaje
“Hola Mundo”
// "Hola Mundo!" en C#
using System;
class Hola
{
static void Main()
{
Console.WriteLine("Hola Mundo!");
}
}

Servicios .NET

14
El lenguaje
Palabras reservadas
abstract class event if new readonly struct unsafe

as const explicit implicit null ref switch ushort

base continue extern in object return this using

bool decimal false int operator sbyte throw virtual

break default finally interface out sealed true volatile

byte delegate fixed internal override short try void

case do float is params sizeof typeof while

catch double for lock private stackalloc uint

char else foreach long protected static ulong

checked enum goto namespace public string unchecked

15
El lenguaje
Operadores
Categoría Operadores

Aritméticos + - * / %

Lógicos & | ^ ! ~ && || true false

Concatenación +

Incremento/Decremento ++ --

Corrimiento << >>

Relacionales == != < > <= >=

Asignación = += -= *= /= %= &= |= ^= <<= >>=

Acceso a miembros .

Índices []

Cast ()

Condicional ?:

Concatenación y remoción + -

Creación de objetos new

Información de tipos is sizeof typeof

Desreferencia y dirección * -> [] &


16
El lenguaje
Tipos
Tipo de C# Tipo en la plataforma .NET ¿Signo? Bytes Posibles valores
empleados
sbyte System.Sbyte Si 1 -128 a 127
short System.Int16 Si 2 -32768 a 32767
int System.Int32 Si 4 -2147483648 a 2147483647
long System.Int64 Si 8 -9223372036854775808 a 9223372036854775807
byte System.Byte No 1 0 a 255
ushort System.Uint16 No 2 0 a 65535
uint System.UInt32 No 4 0 a 4294967295
ulong System.Uint64 No 8 0 a 18446744073709551615
Aproximadamente ±1.5 x 10-45 a ±3.4 x 1038 con
float System.Single Si 4
7 dígitos significativos
Aproximadamente ±5.0 x 10-324 a ±1.7 x 10308
double System.Double Si 8
con 15 o 16 dígitos significativos
Aproximadamente ±1.0 x 10-28 a ±7.9 x 1028 con
decimal System.Decimal Si 12
28 o 29 dígitos significativos
char System.Char - 2 Cualquier carácter de Unicode (16 bit)
bool System.Boolean - 1/2 true o false
17
El lenguaje
Sobrecarga de operadores
operator
public static bool operator == (Value a, Value b)
{return a.Int == b.Int}

Referencia y valor
Copia por referencia
object x = new object();
x.myValue = 10;
object y = x;
y.myValue = 20;

18
El lenguaje
Arreglos de una dimensión
int[] i = new int[100]; // Arreglo de 100 enteros
int[] i = new int[2]; //Llenado del arreglo
i[0] = 1;
i[1] = 2;
int[] i = new int[] {1,2}; // Declaración y asignación
int[] i = {1,2};

Arreglos rectangulares
// Declaración de una matriz de 2x3
int[,] squareArray = new int[2,3];
//Declaración y asignación de una matriz 2x3
int[,] squareArray = {{1, 2, 3}, {4, 5, 6}};
//Algunos métodos inherentes de la clase: System.Array
squareArray.GetLowerBound(1); // Nivel inferior
squareArray.GetUpperBound(1); // Nivel superior
squareArray.GetLength(0); // Tamaño del arreglo

19
El lenguaje
Arreglos no rectangulares
// Declaración del arreglo
int[][] jag = new int[2][];
jag[0] = new int [4]; //Dimensión de la primer fila
jag[1] = new int [6]; //Dimensión de la segunda fila

// Una manera de declarar e inicializar


int[][] jag = new int[][] {new int[] {1, 2, 3, 4},
new int[] {5, 6, 7, 8, 9, 10}};

20
El lenguaje
Tipo enumerado
public enum DAYS
{
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

Nombre o valor
using System;
public class EnumTest
{
public enum DAYS: byte
{ Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo }
public static void Main()
{
Array dayArray = Enum.GetValues(typeof(EnumTest.DAYS));
foreach (DAYS day in dayArray)
Console.WriteLine( "El número {0} de EnumTest.DAYS "
+ " es {1}", day, day.ToString());
}
}

21
El lenguaje
Control de flujo: ciclos
while
do-while
for
for each
Itera sobre cada miembro que derive de la
interfaz IEnumerable
int[] a = new int[]{1,2,3};
foreach (int b in a)
System.Console.WriteLine(b);

22
El lenguaje
Control de flujo: salto
break
continue
goto
No recomendado para realizar iteraciones
Útil en situaciones de decisión en
transiciones (autómatas)

23
El lenguaje
Control de flujo: selección
if-else
switch
Evalúa solo un caso a la vez
Diferente en sintaxis respecto de C++
Opciones de fin por cada caso:
• break
• goto etiqueta

24
El lenguaje
Estructuras
struct Coordinate
{
public int x;
public int y;
public Coordinate(int x, int y)
{
this.x = x;
this.y = y;
}
}

Inicialización en la creación
Coordinate c = new Coordinate(10, 2);

25
El lenguaje
Espacios de nombres: Namespaces
Colecciones de clases ordenadas
jerárquicamente
Bien diferenciadas
Operador ‘.’ para especificar que clase
es la que se usa

26
El lenguaje
Clases
Declaración formada por 4 partes
Atributos
• Información extra para el compilador
Modificadores
• Tipo de acceso a los tipos definidos dentro de la
clase
Clase base
• Nombre de la clase y herencia
Cuerpo de la clase

27
El lenguaje
Clases: Modificadores
public
internal
protected
protected internal
private
new
abstract
sealed

28
El lenguaje
Métodos
Operaciones asociadas con la clase
Modificadores
static
virtual, override
extern
Parámetros
Referencia o valor
• Ref/out

29
El lenguaje
Métodos: sobrecarga
Identificador de nula duplicidad
Nombre del método
Parámetros (tipo de ellos)
public static int myMethod(int a,ref double b);
public static void myMethod(int e,ref double f,out bool g,char h);

30
El lenguaje
Métodos: Polimorfismo
Sobre escritura o redefinición de un método
heredado
public virtual double getArea() // En Rectangulo
{
return length * width;
}
public override double getArea() // En Cuadrado:Rectangulo
{
return length * length;
}
Square sq = new Square(5);
double area = sq.getArea();
Rectangle r = sq;
double area = r.getArea();
En ambos casos se usa el método
Cuadrado::Rectangulo

31
El lenguaje
Métodos: Polimorfismo
Ocultamiento
public double getArea() // En Rectangulo
{
return length * width;
}
public new double getArea() // En Cuadrado:Rectangulo
{
return length * length;
}
Square sq = new Square(5);
double area = sq.getArea();
Rectangle r = sq;
double area = r.getArea();

El método no es sobre escrito realmente, sino solo


escondido a la clase de donde heredo

32
Ejemplo: TDA Cola
//////////////////////////////////////////////////////////////////////
//
// Extraído de http://www.csharphelp.com/archives/archive14.html
//
//////////////////////////////////////////////////////////////////////
//Inicio de código
namespace Queue
{
using System;
///
/// implementación de una cola FIFO
///
public class Queue {
private uint count = 0;
private Node front = null;
private Node end = null;
private Node temp = null;

///
/// Verifica si la cola está vacia
///
public bool empty {
get {
return(count==0);
}
}

33
Ejemplo: TDA Cola
/// Regresa el número de elementos en la cola
public uint Count {
get {
return count;
}
}
/// Agrega un elemento a la cola
public void append(object obj) {
if(count==0){
front = end = new Node(obj, front);
} else {
end.Next = new Node(obj, end.Next);
end = end.Next;
}
count++;
}
/// Despacha al primer elemento de la cola. Es importante notar que no se libera
/// memoria pues esto es dejado a la máquina virtual (recolector de basura)
public object serve() {
temp = front;
if(count == 0)
throw new Exception("Cola vacia!");
front = front.Next;
count--;
return temp.Value;
}

34
Ejemplo: TDA Cola
///
/// Imprime el contenido de la cola
///
public void printQueue() {
temp = front;
while(temp != null){
Console.WriteLine("{0}", temp.Value.ToString());
temp = temp.Next;
}
}

}
///
/// La clase nodo se encarga de apunar al séte elemento y
/// guarder al objeto
///
class Node
{
public Node Next;
public object Value;

public Node(object value, Node next)


{
Next = next;
Value = value;
}
}

35
Ejemplo: TDA Cola
///
/// Prueba la cola para 3 elementos
///
class QueueTest
{
static void Main() {
Queue Q = new Queue();
object obj;
uint i,j;
UInt16[] numbers = new UInt16[]{10,20,30};
for(i = 0;i < numbers.Length;i++)
Q.append(numbers[i]);
Q.printQueue();
Console.WriteLine("Elementos en la cola = {0}", Q.Count);
j = Q.Count;
for(i = 0;i < j;i++){
obj = Q.serve();
Console.WriteLine("Despacha cola = {0}",
obj.ToString());
}
Console.WriteLine("Elementos en la cola = {0}", Q.Count);
}
}

}
//Fin del código

36
37

También podría gustarte