Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2 CsCaracteristicasGenerales PDF
2 CsCaracteristicasGenerales PDF
UNIVERSIDAD DE OVIEDO
Cod. 1728.61
PLATAFORMA .NET Y
SERVICIOS WEB
Caractersticas Generales de C#
Benjamn Lpez Prez
benja@lsi.uniovi.es
Dpto. de Informtica
OOTLab - Laboratorio de Tecnologas de Orientacin a Objetos
http://www.ootlab.uniovi.es
Contenidos
1.
2.
3.
4.
5.
6.
7.
Generalidades
Tipos
Expresiones
Declaraciones
Sentencias
Clases y estructuras
Cdigo Inseguro
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas de C#
Sencillez
Autocontenido (sin IDLs, ficheros de cabecera,...)
Sin elementos inneccesarios (::, macros, etc.)
Tipo bsicos de tamao fijo
Modernidad
Tipos bsicos para decimales, cadenas y lgicos
Soporte extensible para colecciones
Orientado a objetos
Sin funciones ni variables globales
Herencia simple
Encapsulacin con public,protected,private e internal.
Redefinibildad explcita (menos errores y ms eficiente)
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas de C#
Orientado a componentes
Seguridad de tipos
Control de conversiones
Control de inicializacin de variables
Control de ndices en accesos a tablas
Control de desbordamientos
Control de tipos en punteros a funcin
Control en parmetros mltiples
Recolector de basura
Liberacin recursos determinista con using
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas de C#
Instrucciones seguras
Extensibilidad de operadores
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas de C#
Extensibilidad de modificadores
Atributos
Versionable
Redefinir virtual con override
Ocultar con new
Compatible
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Introduccin a C#
1.
2.
3.
4.
5.
6.
Generalidades
Tipos
Expresiones
Declaraciones
Sentencias
Clases y Estructuras
C# Avanzado
7.
8.
9.
10.
11.
12.
13.
14.
Herencia
Interfaces
Delegados
Excepciones
Namespaces y Ensamblados
Atributos
Threads
Comentarios XML
Referencias:
B.Albahari, P.Drayton, B.Merrill: C# Essentials. O'Reilly, 2001
S.Robinson et al: Professional C#, Wrox Press, 2001
Documentacin en lnea en el CD .NET SDK
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas de C#
Muy similar a Java
70% Java, 10% C++, 5% Visual Basic, 15% nuevo
Como en Java
Como en C++
(Operador) Sobrecarga
Aritmtica punteros en cdigo
inseguro
Algunos detalles sintcticos
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Nuevas caracterticas de C#
Nuevo (comparado con Java)
"Simplificaciones Sintcticas"
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Hola Mundo
Fichero Hola.cs
using System;
class Hola {
static void Main() {
Console.WriteLine("Hola Mundo");
}
}
Compilacin (en la ventana de consola)
csc Hola.cs
Ejecucin
Hola Mundo
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Fich. F1.cs
namespace A {...}
clase X {...}
Fich. F2.cs
namespace B {...}
clase Y {...}
Fich. F3.cs
namespace C {...}
clase Z {...}
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
class Contador {
int val = 0;
public void Add (int x) { val = val + x; }
public int Val () { return val; }
}
Prog.cs
Compilacin
csc Contador.cs Prog.cs
=> genera Prog.exe
Ejecucin
Prog
using System;
class Prog {
static void Main() {
Contador c = new Contador();
c.Add(3); c.Add(5);
Console.WriteLine("val = " +
c.Val());
}
}
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
1.
2.
3.
4.
5.
6.
7.
Generalidades
Tipos
Expresiones
Declaraciones
Sentencias
Clases y estructuras
Cdigo Inseguro
Tipos Value
Tipos Simples
bool
char
sbyte
short
int
long
Enums
byte
float
ushort double
decimal
uint
ulong
Tipos Reference
Structs
Clases
Punteros
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Tipos Reference
variable contiene
almacenada en
inicializacin
asignacin
valor
stack
0, false, '\0'
copia el valor
referencia
heap
null
copia la referencia
ejemplo
int i = 17;
int j = i;
string s = "Hola";
string s1 = s;
17
s
Hola
17
s1
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Tipos Simples
sbyte
byte
short
ushort
int
uint
long
ulong
float
double
decimal
bool
char
Forma Larga
en Java
Rango
System.SByte
System.Byte
System.Int16
System.UInt16
System.Int32
System.UInt32
System.Int64
System.UInt64
System.Single
System.Double
System.Decimal
System.Boolean
System.Char
byte
--short
--int
--long
--float
double
--boolean
char
-128 .. 127
0 .. 255
-32768 .. 32767
0 .. 65535
-2147483648 .. 2147483647
0 .. 4294967295
-263 .. 263-1
0 .. 264-1
1.5E-45 .. 3.4E38 (32 Bit)
5E-324 .. 1.7E308 (64 Bit)
1E-28 .. 7.9E28 (128 Bit)
true, false
Carcter Unicode
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
double
Slo con
type cast
float
long
int
short
sbyte
ulong
uint
ushort
byte
char
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Enumeraciones
Lista de constantes con nombre
Declaracin (directamente en un namespace)
enum Color {rojo, azul, verde} // valores: 0, 1, 2
enum Acceso {personal=1, grupo=2, todos=4}
enum Acceso1 : byte {personal=1, grupo=2, todos=4}
Uso
Color c = Color.azul;
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
if (c == Color.rojo) ...
if (c > Color.rojo && c <= Color.verde) ...
c = c + 2;
c++;
if ((c & Color.rojo) == 0) ...
c = c | Color.azul;
c = ~ Color.rojo;
Nota
Enumeraciones no pueden asignarse a int (excepto despus de un
type cast).
Tipos Enumeraciones heredan de object (Equals, ToString, ...).
La clase System.Enum proporciona operaciones para enumeraciones
(GetName, Format, GetValues, ...).
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Arrays
Arrays Unidimensionales
int[] a = new int[3];
int[] b = new int[] {3, 4, 5};
int[] c = {3, 4, 5};
UnaClase[] d = new UnaClass[10];
UnaStruct[] e = new UnaStruct[10];
// Array de referencias
// Array de valores (directam. en el array)
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Arrays Multidimensionales
Dentado (como en Java)
a[0][1]
a[0]
a[1]
int x = a[0][1];
int len = a.Length; // 2
len = a[0].Length; // 3
a[0, 1]
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Clase System.String
Puede usarse como el tipo estndar string
string s = "Alfonso";
Nota
Strings son inmutables (usar StringBuilder para modificar strings)
Concatenar con +: "Don " + s
Indexar: s[i]
Longitud de String: s.Length
Strings son tipos reference => semntica de reference en asignaciones
Comparacin de valores con == y != : if (s == "Alfonso") ...
Clase String define varias operaciones tiles:
CompareTo, IndexOf, StartsWith, Substring, ...
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Structs
Declaracin
struct Punto {
public int x, y;
public Punto (int x, int y) { this.x = x; this.y = y; }
public void MoverA (int a, int b) { x = a; y = b; }
}
// campos
// constructor
// mtodos
Uso
Punto p = new Punto(3, 4);
p.MoverA(10, 20);
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Clases
Declaracin
class Rectangulo {
Punto origen;
public int ancho, alto;
public Rectangulo() { origen = new Punto(0,0); ancho = alto = 0; }
public Rectangulo (Punto p, int an, int al) { origen = p; ancho = an; alto = al; }
public void MoverA (Punto p) { origen = p; }
}
Uso
Rectangulo r = new Rectangulo(new Punto(10, 20), 5, 5);
int area = r.ancho * r.alto;
r.MoverA(new Punto(3, 3));
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Structs
Tipos Reference
(objetos almacenados en la heap)
Tipos Value
(objetos almacenados en el stack)
Soporta herencia
No tienen herencia
(todas las clases se derivan de object) (pero es compatible con object)
Pueden implementar interfaces
No permiten destructores
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Boxing y Unboxing
Tipos Value (int, struct, enum) son compatibles con object tambin
Boxing
La asignacin
object obj = 3;
Unboxing
La asignacin
int x = (int) obj;
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Boxing/Unboxing
Permite la implementacin de contenedores genricos de tipos
class Cola {
...
public void Meter(object x) {...}
public object Sacar() {...}
...
}
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
1.
2.
3.
4.
5.
6.
7.
Generalidades
Tipos
Expresiones
Declaraciones
Sentencias
Clases y estructuras
Cdigo Inseguro
(x) x.y f(x) a[x] x++ x-- new typeof sizeof checked unchecked
+ - ~ ! ++x --x (T)x
* / %
+ << >>
< > <= >= is as
== !=
&
^
|
&&
||
c?x:y
= += -= *= /= %= <<= >>= &= ^= |=
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Comprobacin de Overflow
Por defecto el Overflow no se comprueba
int x = 1000000;
x = x * x;
// -727379968, no error
// System.OverflowException
checked {
...
x = x * x;
...
}
// System.OverflowException
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
typeof y sizeof
typeof
Devuelve el descriptor del Type para un tipo dado.
(el descriptor del Type de un objeto o se obtiene con o.GetType()).
Type t = typeof(int);
Console.WriteLine(t.Name);
// Int32
sizeof
Devuelve el tamao en bytes de un tipo.
Slo se puede aplicar a tipos value.
Slo se puede utilizar en un bloque unsafe (el tamao de las structs
pueden depender del sistema).
Debera compilarse con csc /unsafe xxx.cs
unsafe {
Console.WriteLine(sizeof(int));
Console.WriteLine(sizeof(MiTipoEnum));
Console.WriteLine(sizeof(MiTipoStruct));
}
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
1.
2.
3.
4.
5.
6.
7.
Generalidades
Tipos
Expresiones
Declaraciones
Sentencias
Clases y estructuras
Cdigo Inseguro
Declaracin de Espacio
rea del programa a la que pertenece la declaracin
Las Entidades pueden ser declaradas en un...
ENTIDAD
DECLARACIN DE
-
namespace:
class, interface, struct:
enum:
bloque:
Reglas de mbito
- Un nombre no puede declararse dos veces en el mismo espacio de declaracin.
- Las Declaraciones pueden ocurrir en un orden arbitrario.
Excepcin: variables locales deben declararse antes de ser usadas
Reglas de Visibilidad
- Un nombre slo es visible dentro de su espacio de declaracin
(variables locales son visibles slo despus del punto de su declaracin).
- La visibilidad puede ser restringida por modificadores (private, protected, ...)
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Namespaces
Fichero: X.cs
namespace A {
... Classes ...
... Interfaces ...
... Structs ...
... Enums ...
... Delegates ...
namespace B { // nombre completo: A.B
...
}
}
Fichero: Y.cs
namespace A {
...
namespace B {...}
}
namespace C {...}
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Figuras.cs
namespace Util.Figuras {
public class Rect {...}
public class Circulo {...}
}
Triangulo.cs
namespace Util.Figuras {
public class Triangulo {...}
}
using Util.Figuras;
class Test {
Rect r;
// sin cualificacin (por el uso de Util.Figuras)
Triangulo t;
Util.Color c; // con cualificacin
}
Namespaces externos
Deben ser importados (ej. using Util;)
o especificarse el nombre cualificado (ej. Util.Color)
La mayora de los programas necesitan el namespace System =>
using System;
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Bloques
// bloque anidado
Nota
El espacio de declaracin de un bloque incluye los espacios de
declaracin de los bloques anidados.
Parmetros formales pertenecen al espacio de declaracin del bloque
del mtodo.
La variable de bucle en una sentencia for pertenece al bloque de esta.
La declaracin de una variable local debe ser anterior a su uso.
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
1.
2.
3.
4.
5.
6.
7.
Generalidades
Tipos
Expresiones
Declaraciones
Sentencias
Clases y estructuras
Cdigo Inseguro
Sentencias Simples
Sentencia vaca
;
// ; es un terminador, no un separador
Asignacin
x = 3 * y + 1;
Llamada a mtodo
string s = "a,b,c";
string[] partes = s.Split(',');
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Sentencia if
if ('0' <= ch && ch <= '9')
val = '0' - ch;
else if ('A' <= ch && ch <= 'Z')
val = 10 + 'A' - ch;
else {
val = 0;
Console.WriteLine(carcter invalido {0}", ch);
}
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Sentencia switch
switch (country) {
case "Germany": case "Austria": case "Switzerland":
language = "German";
break;
case "England": case "USA":
language = "English";
break;
case null:
Console.WriteLine("no country specified");
break;
default:
Console.WriteLine("don't know language of {0}", country);
break;
}
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
c
2
int estado = 0;
int ch = Console.Read();
switch (estado) {
case 0:
if (ch == 'a') { ch = Console.Read(); goto case 1; }
else if (ch == 'c') goto case 2;
else goto default;
case 1:
if (ch == 'b') { ch = Console.Read(); goto case 1; }
else if (ch == 'c') goto case 2;
else goto default;
case 2:
Console.WriteLine(entrada vlida");
break;
default:
Console.WriteLine(carcter illegal {0}", ch);
break;
}
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Bucles
while
while (i < n) {
suma += i;
++;
}
do while
do {
suma += a[i];
i--;
} while (i > 0);
for
for (int i = 0; i < n; i++)
suma += i;
Forma abreviada de
int i = 0;
while (i < n) {
suma += i;
i++;
}
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Sentencia foreach
Para iterar sobre colecciones y arrays
int[] a = {3, 17, 4, 8, 2, 29};
foreach (int x in a) suma += x;
string s = "Hola";
foreach (char ch in s) Console.WriteLine(ch);
Cola q = new Cola();
q.Sacar("John"); q.Sacar("Alice"); ...
foreach (string s in q) Console.WriteLine(s);
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Saltos
break;
continue;
goto case 3:
miLab:
...
goto miLab;
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Sentencia return
Retorna de un mtodo void
void f(int x) {
if (x == 0) return;
...
}
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
1.
2.
3.
4.
5.
6.
7.
Generalidades
Tipos
Expresiones
Declaraciones
Sentencias
Clases y estructuras
Cdigo Inseguro
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Clases
class Stack {
int[] values;
int top = 0;
public Stack(int size) { ... }
public void Push(int x) {...}
public int Pop() {...}
}
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Structs
struct Punto {
int x, y;
public Punto(int x, int y) { this.x = x; this.y = y; }
public MoverA(int x, int y) {...}
}
// error de compilacin
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
1.
2.
3.
4.
5.
6.
7.
Generalidades
Tipos
Expresiones
Declaraciones
Sentencias
Clases y estructuras
Cdigo Inseguro
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Cdigo Inseguro
1.
2.
3.
4.
5.
6.
7.
Conceptos bsicos
Compilacin de cdigo inseguro
Marcacin de contextos inseguros
Definicin de punteros
Manipulacin de punteros
Operadores de cdigo inseguro
Fijacin de objetos en memoria
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Conceptos bsicos
Puntero: Variable que almacena una
direccin de memoria. NO deriva de
System.Object
Cdigo inseguro: El que usa punteros. Se
marca con unsafe
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Definicin de punteros
Sintaxis bsica: <tipo> * <nombre>;
Ejemplos:
int * pi;
int *pi, pj; // Ambos son int *
int[ ] * pTabla;
int ** punteroApuntero;
void * pCualquierCosa;
Notas:
<tipo> almacenable en pila completo
Campos slo admiten multidefinicin si se aplica
unsafe globalmente al tipo al que pertenezcan
null por defecto
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Notas:
Admite variables no inicializadas
No admite constantes ni variables readonly
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Notas:
No admite punteros void *
No admite punteros a null. SUELE producir
System.NullReferenceException
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Notas:
No admite punteros null ni void * (se basa en *)
Equivalente P->M a (*P).M
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
relacionales e =)
// False
//True;
// 11
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
padding
Tipo
byte, byte, bool
short, ushort, char
int, uint, float
long, ulong, double
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Resultado
1
2
4
8
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
<instrucciones>
Significado: Fija direcciones de inicializacin de
punteros de declarados en <declaraciones>
durante la ejecucin del bloque de <instrucciones>
Notas:
Permite apuntar a tablas
Los punteros fijados no pueden modificarse
No fija direcciones nulas (NullReferenceException)
Slo un <tipo>, pero se permite anidamiento
Cursos de Verano 2002
UNIVERSIDAD DE OVIEDO
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Resumen de C#
Familiar
Seguro
Fuertemente tipado
Comprobaciones en
tiempo de ejecucin
Recolector de basura
Control de versiones
Expresivo
Orientado a objetos (clases, interfaces, ...)
Orientado a componentes (propiedades,
eventos, ensamblados, ...)
Sistema de tipos uniforme (boxing /
unboxing)
Enumeraciones
Delegados
Indizadores
Parmetros ref y out
Value objects en el stack
Threads y sincronizacin
Excepciones
Atributos definidos por el usuario
Reflexin
...
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab
Caractersticas Generales de C#
presentacin
FinFin
dedelalapresentacin
Caractersticas generales de C#
Benjamn Lpez Prez
OOTLab
OOTLab