Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutorial de C# Programación OO: Por: Óscar López, M.SC
Tutorial de C# Programación OO: Por: Óscar López, M.SC
Programacin OO
Por: scar Lpez, M.Sc.
olopez@uniandino.com.co
Hola Mundo!
1.
using System;
2.
namespace HolaMundo {
/// <summary>
/// Summary description for Hola.
/// </summary>
class Hola {
3.
4.
5.
6.
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Console.WriteLine(Hola Mundo!);
}
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
}
OALP-2004 All Rights Reserved
CREACIN DE OBJETOS
Clases - Definicin
[[atributos]] [modificadores]
class identificador [: base,]
{cuerpo clase}
Modificadores de Clase
Modificador
Comentario
new
abstract
internal
sealed
Modificadores de Acceso
Modificador
public
private
protected
internal
protected
internal
Comentario
Sin restricciones. Visible desde cualquier
mtodo de cualquier clase
Slo es visible desde los mtodos de la
misma clase
Visible desde los mtodos de una clase y
todas sus sub-clases
Visible desde los mtodos de todas las
clases dentro de un mismo ensamblaje
Visible desde los mtodos de una clase,
sus sub-clases, y todas las clases en su
mismo ensamblaje
OALP-2004 All Rights Reserved
Modificadores Aplicables
Acceso por
Defecto
espacios de
nombres
(implcito) public
public
clases, interfaces,
estructuras
public, internal
internal
miembros de
clase (incluyendo
tipos anidados)
public, protected,
internal, protected
internal, private
private
miembros de
estructura
public, internal,
private
private
miembros de
interfaz
(implcito) public
public
miembros de
enumeracin
(implcito) public
public
this
base
Constructores de Instancia
El nombre del constructor debe ser el
mismo del nombre de la clase
No tienen un tipo de retorno
Si no se especifica, se crea un constructor
por defecto
Los constructores se pueden sobrecargar
y pueden llamar a otros constructores
dentro de la misma clase o en una superclase
2.
3.
4.
5.
6.
7.
8.
9.
10.
string mListBoxContents;
11.
12.
13.
14.
15.
16.
17.
18.
}
OALP-2004 All Rights Reserved
Constructores Estticos
1.
2.
static Window() {
gLib = getLib();
}
3.
4.
5.
6.
Tipo
Numrico (int, long, etc.)
bool
char
enum
referencia
Destructores
1.
2.
3.
Recolector de Basura!
Normalmente no son necesarios, slo si se deben liberar recursos
costosos
Los destructores se llaman cuando un objeto es recolectado, es un
proceso no-determinstico
No se pueden llamar explcitamente (pero un objeto se puede marcar
para ser recolectado asignndole null)
~Window() {
gLib.release();
}
Implementando IDispose
1.
using System;
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
~TestDispose() {
MyDispose();
}
16.
17.
18.
19.
}
OALP-2004 All Rights Reserved
Declaracin using
Clases Anidadas
fp.Draw(f1);
Estructuras
[[atributos]] [modificadores acceso]
struct identificador [: interfaz,]
{cuerpo estructura}
Estructuras - Ejemplo
1.
using System;
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
COMPARTIR INFORMACIN
Herencia
En C#, una clase slo puede tener una superclase, y todas las clases heredan de
System.Object
Mtodos de System.Object
Mtodo
Comentario
prueba identidad
public Type
GetType()
protected object
MemberwiseClone()
copia superficial
protected virtual
Finalize()
limpieza
OALP-2004 All Rights Reserved
Polimorfismo
using System;
2.
class A {
public virtual void DoThis() {
Console.WriteLine(A);
}
}
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class B : A { // B extiende A
public new void DoThis() {
Console.WriteLine(B);
}
}
class Test {
public static void Main() {
A temp1 = new A();
temp1.DoThis();
B temp2 = new B();
temp2.DoThis();
A temp3 = new B();
temp3.DoThis();
A temp4 = (A)temp2;
temp4.DoThis();
}
}
Clases Abstractas
Clases Selladas
Interfaces
[[atributos]] [modificadores acceso]
interface identificador [: interfaz,]
{cuerpo interfaz}
if (doc is IStorable)
IStorable isDoc = (IStorable) doc;
Qu Define a un Objeto?
Estado
Comportamiento
Identidad
Eventos
OALP-2004 All Rights Reserved
Estado
Campos
Constantes
Campos de slo lectura
Enumeraciones
Comportamiento
Constructores de instancia
Constructores estticos
Destructores
Tipos anidados
Propiedades
Propiedades Indexadas
Mtodos
Operadores
Delegados y Eventos
OALP-2004 All Rights Reserved
ESTADO
Campos
Constantes
// Nmero de milisegundos en un da
const long MS_POR_DIA = 1000*60*60*24;
OALP-2004 All Rights Reserved
using System;
using System.Threading;
3.
1.
int id;
readonly DateTime timeOfInstanceCreation = DateTime.Now;
static readonly DateTime timeOfClassLoad = DateTime.Now;
static readonly ReadOnly ro = new ReadOnly();
4.
5.
6.
7.
11.
public ReadOnly() {
Console.WriteLine(Clase cargada: {0}, Instancia creada: {1},
timeOfClassLoad, timeOfInstanceCreation);
}
12.
8.
9.
10.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Enumeraciones
[[atributos]] [modificadores]
enum identificador [: base]
{lista de enumeracin,}
Enumeraciones
1.
2.
3.
4.
5.
6.
Enumeraciones - Ejemplo
1.
using System;
2.
class Values {
3.
// declaracin de la enumeracin
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
}
OALP-2004 All Rights Reserved
COMPORTAMIENTO
Propiedades
[modificadores] tipo identificador {
get {
return campo;
}
set {
campo = value;
}
}
Propiedades - Ejemplo
1.
using System;
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Propiedades Indexadas
[modificadores] tipo this [tipo argumento,] {
get {
;
}
set {
;
}
}
using System;
2.
class TestClass {
// este es el arreglo encapsulado
string[] myArray = new string[10];
3.
4.
5.
6.
7.
8.
9.
29.
// constructor
public TestClass() {
for (int i=0; i<10; i++)
myArray[i] = hola;
}
30.
31.
32.
33.
34.
// indexador sobrecargado
Console.WriteLine(indice que +
contiene mundo es + c[mundo]);
35.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
36.
37.
38.
39.
Mtodos
[[atributos]][modificadores]
tipo nombre ([parmetros]) {cuerpo}
Uso de params
Permite utilizar arreglos unidimensionales
como listas de parmetros de tamao
variable
No forma parte de la firma de un mtodo
Slo puede usarse una por mtodo
Si un mtodo tiene ms de un parmetro,
params debe declararse de ltimo
Si lo que se desea es una lista de tamao
y tipo variable, utilizar params object []
using System;
2.
class Test {
public void DisplayVals(params int[] intVals) {
for (int i = 0; i < intVals.Length; i++) {
Console.WriteLine(DisplayVals {0}, intVals[i]);
}
}
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
}
OALP-2004 All Rights Reserved
ORGANIZACIN
Espacios de Nombres
Una forma de organizar elementos e
identificarlos de manera nica
Evita el riesgo de colisiones de nombres
Dos espacios de nombres pueden
contener la misma clase
Pueden anidarse
Dentro de stos pueden definirse alias
13.
namespace TutorialCSharp {
namespace TutorialCSharpTest {
using System;
using C = System.Console; // definicin de alias
public class Tester {
public static int Main() {
for (int i=0;i<10;i++)
C.WriteLine(i: {0},i); // uso de alias
return 0;
}
}
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
TutorialCSharp.TutorialCSharpTest.Tester
OALP-2004 All Rights Reserved
Ensamblajes
Ensamblajes
Meta-datos
Informacin almacenada que especifica los tipos y
mtodos del ensamblaje, describiendo por completo el
contenido de cada mdulo: los ensamblajes son autodescriptivos
Seguridad
Forman un lmite de seguridad al limitar el alcance de
los tipos que contienen: la definicin de un tipo no puede
cruzar dos ensamblajes
Versiones
Tienen un nmero de versin que se refiere al contenido
de un slo ensamblaje. Todos los tipos y recursos
dentro del ensamblaje cambian de versin juntos. Son
de la forma mayor:menor:construccin:revisin
OALP-2004 All Rights Reserved
Ensamblajes - Manifiestos
Ensamblajes - Multi-Mdulo
Ensamblajes - Privados
Diseados para ser usados por una sola
aplicacin
Por defecto, los ensamblajes son privados
Los archivos son mantenidos en un mismo
directorio (y sus subdirectorios), nada ms
depende de ellos y se pueden instalar en
otra mquina copindolos directamente
Puede tener cualquier nombre, puesto que
es un nombre local
Ensamblajes - Compartidos