Sie sind auf Seite 1von 45

Fundamentos bsicos del lenguaje C#

Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft

Parte 1 Introduccin a C#

Sistemas Orientados a Componentes


Com
Modelo de componentes exitoso Plataforma comercial de componentes viable Permite la integracin y el re uso de

componentes en una organizacin

Sistemas Orientados a Componentes


Sin embargo:
COM est mostrando signos de envejecimiento DCOM no funciona como se espera en Internet Mayor uso de componentes = mayor infierno de DLLs An con herramientas maduras las implementaciones no son fciles

COM no es totalmente agnstico del lenguaje Hace algunas asunciones respecto del formato binario Soporta el menor comn denominador

Concepto de Componentes en .NET


Se tomo lo mejor de COM+
Interfaces como contratos abstractos

Los componentes implementan y exponen interfaces


Exploracin dinmica de las capacidades de los

componentes Comportamiento segn atributos (transacciones, Pooling, ...)

Y le agrega
Verdadera orientacin a objetos Modelo de eventos nativos Re uso de componentes entre lenguajes Extensible a todo nivel

Porque C# ?
Primer lenguaje orientado a componentes
Basado en la experiencia de COM+

Soporte nativo para Namespaces Versionamiento Desarrollo basado en atributos

El poder de C con la facilidad de VB Curva de aprendizaje mnima Mucho ms limpio que C++ Ms estructurado que VB

Seccin 2: Elementos de C#
Forma y estructura Entendiendo los tipos del sistema Entendiendo el lenguaje C#

Forma y Estructura
No hay archivos de encabezamiento (.H)
No es necesario declarar las clases y los tipos

La declaracin y el cdigo estn en un solo lugar


Hace que el cdigo sea ms consistente y

mantenible Facilita la colaboracin a nivel equipo de desarrollo Declaraciones accesibles: Metadata

Compilacin condicional pero sin macros

Tipos definidos por el Sistema


Construido sobre el Common Type System Conceptos bsicos:
Todo es un objeto
Todo tiene herencia implcita de System.Object

Distincin entre valores y referencias


Por valor: tipos simples, enumeradores, estructuras Por referencia: interfaces, clases, vectores

Tipos Simples
Enteros
byte, sbyte (8bit), short, ushort (16bit) int, uint (32bit), long, ulong (64bit) double (precisin de 15-16 dgitos) float (precisin de 7 dgitos) Decimal (28 dgitos significativos) char string (referencia)

IEEE Floating Point Numricos exactos

Cadenas de caracteres Boolean

bool (no es intercambiable con int)

Enums
Coleccin de elementos nombrados Fuertemente tipeados Mejor usar "color.Azul" que "3"
Mas legibilidad del cdigo Tan liviano cmo un int

Ejemplo:
enum Color { Rojo, Verde, Azul, Amarillo };

Vectores
Inician en cero, vinculados por tipo Basadas en la clase System.Array de .NET Declaracin con tipo y forma, pero sin lmite
int[] SingleDim; int[,] TwoDim; int [][] Jagged;

Creacin utilizando new con lmites o inicializadores


SingleDim = new int[20]; TwoDim = new int[,]{{1,2,3},{4,5,6}};

Jagged = new int[1][];

Jagged[0] = new int[]{1,2,3}

Interfaces
Declaracin del contrato semntico entre partes
Permite la orientacin a componentes

Define la estructura y la semntica para propsitos especficos Definicin de mtodos y propiedades abstractos Soporta herencia (mltiple) Ejemplo: interface IPersonaEdad
{ int AnioDeNacimiento {get; set;} int Edad(); }

Clases
Implementacin de cdigo y datos Implementa interfaces Herencia simple Las clases contienen:
Campos: variables miembro Propiedades: valores accedidos
public class Persona : IPersonaEdad { private int iAnio; public Persona() { } public int AnioDeNacimiento { get { return iAnio;}; set { iAnio = value;}; } public int Edad() { return Today()AnioDeNacimiento }; }

a travs de get/set Mtodos: funcionalidad Especiales: eventos, Indexadores, Delegates

Estructuras
Un grupo de cdigo y datos
Similar a las clases pero:
No permite herencia Siempre son pasadas por valor

Clases vs. Estructuras


Estructuras Contenedor de datos liviano, por valor Clases objetos, tipo referenciados

Desarrolladores C++!
struct no es un class donde todo es pblico

Ejemplo:

struct Point { double X; double Y; void MoveBy(double dX, double dY) { X+=dX; Y+=dY; } }

Propiedades
Mezcla entre campos y mtodos Uso de propiedades para:
Implementacin de miembros slo lectura

(omitiendo set) Validacin en asignacin Valores calculados o compuestos Exposicin de valores en las interfaces

Ejemplo:

string Name { get { return name; } set { name = value; } }

Indexadores
Forma consistente de construir contenedores Basados en las propiedades Permite el acceso indexado a objetos contenidos El ndice puede ser de cualquier tipo Ejemplo: object this[string index]
{ } set { Dict.Add(index,value); } }

get { return Dict.Item(index);

Delegates y Eventos
Delegate
Similar a los punteros a funciones de C, C++ Fuertemente tipeados delegate void Clicked(Element e, Point p);

Eventos
Modelo de eventos intrnseco al lenguaje (por fin)

Declaracin y llamada en la clase fuente del evento

Button.OnClick += MyClickHandler; event Click OnClick;


...

OnClick(this,PointerLocation);

Atributos
Similar a los atributos existentes de IDL Acceso declarativo a funcionalidad Extensible: atributos Custom
[Transaction(TransactionOption.Required)] class MyBusinessComponent { ... }
[PersonFirstName] String Vorname; [PersonFirstName] String PrimarioNome;

Instrucciones
Muy C: control de flujo
if (<bool expr>) { ... } else { ... }; switch(<var>) { case <const>: ...; }; while (<bool expr>) { ... }; for (<init>;<bool test>;<modify>) { ... };

Do { ... } while (<bool expr>);

No muy C:
lock(<object>){ ... };

Secciones crticas checked {...}; unchecked { ...}; Proteccin de sobrecarga de enteros

Foreach
Iteracin de colecciones y vectores Pueden ser utilizados en clases propias Acceso slo lectura Ejemplo:
Point[] Points = GetPoints(); foreach( Point p in Points ) { MyPen.MoveTo(Point.x,Point.y); }

Sobrecarga de Operadores
Casi todos los operadores pueden ser sobrecargados No hay sobrecarga para
Asignaciones Operadores especiales (sizeof, new, is, typeof)

Ejemplo:
Total operator +(int Amount, Total t) { t.total += a; }

Acceso a los miembros


Adopcin del modelo C++
public todos pueden acceder protected slo miembros de la herencia private slo miembros de la clase

Expande el modelo C++:


sealed no puede ser utilizado como clase base
internal acceso pblico solamente en el

assembly

Punteros, necesito punteros


C# soporta
Tipo string intrnseco

Modelo rico de colecciones


Parmetros por referencia
void increment(ref int value, int by)

Parmetros de salida
bool add(int a, int b, out int c)

Eliminacin de la mayora de las causas Pero, an disponible: unsafe


unsafe void crypt(byte[] arr) { byte * b = arr; ... }

Manejo de Excepciones
Muy similar a C++, SEH Se debe leer as:
try ejecutando este cdigo ... ... Si se genera un error, catch lo que puedo llegar a

manejar ... ...finally permtame hacer alguna limpieza manual

Ejemplo:

try { //... cdigo } catch(SomeException e) { //... Control de error } finally { //...salida correcta }

Namespaces
Forma de agrupar LGICAMENTE clases
Un namespace puede contener a clases y a

otros namespace Similar al concepto de COMPONENTE COM Pero desacoplado de la definicin fsica

Se declaran con namespace Referenciados con using

Comentarios XML
Forma consistente de crear documentacin en el cdigo ///: Todo lo comentado as va a parar a la metadata Ejemplo:
///<summary> /// Esta funcin permite calular el monto /// final incluyendo todos los impuestos /// </summary> public decimal GetTotalValue() { }

Seccin 3: Las Herramientas


Framework SDK herramientas bsicas
C# Compiler

Visual Debugger
NMake

VisualStudio.NET agrega
Ambiente visual
Asistentes y plantillas Ayuda Inteligente

Framework SDK
Contiene al compilador C# (y VB, C++, JScript)
Se ejecuta desde la lnea de comando

Visual Debugger GuiDebug


Acceso completo al runtime y los metadatos

Herramientas
NMake, Security, Configuration, IL Disassembler,

...

Gratis para todos

Ejemplos
namespace Consola { using System; public class Class1 { public Class1() { }

Hola mundo

public static int Main(string[] args) { Console.WriteLine("Hola, mundo"); Console.Read(); return 0; } } }

Ejemplos Comentarios XML


using System; /// <summary> /// Muestra en pantalla la frase "hola, mundo" /// </summary>

Parte 2 Desarrollo de Componentes


Contenido
Introduccin a componentes .NET Interoperabilidad con COM+

1. Introduccin a Componentes .NET


Grupo de clases que estn tpicamente bajo un Namespace comn Las clases que sean pblicas se expondrn hacia fuera del componente Todo elemento pblico de cada clase se ve fuera de ella No se registra el componente en ningn lado

Ejemplo de Componente .NET en C#

Ejemplo de Componente .NET en C#


namespace Componente1 { using System;

/// <summary> /// MiCOmponente. /// </summary> public class MiComp1 { public MiComp1() { } public System.String MiFunc() /// <summary> /// Devuelve la hora actual. /// </summary> { return(System.DateTime.Now.ToString()); } } }

Componentes .NET
Jerarqua de herencia Definicin de Namespaces Implementacin fsica Implementacin de interfaces

Jerarqua de Herencia
Independiente de los Namespaces Independiente de la implementacin fsica

Definicin de NameSpaces
Sirve para ordenar las clases (repaso) Es una agrupacin lgica

Ejemplo de Definicin de Namespaces


MSDNLatam MSDNLatam.Nucleo MSDNLatam.Nucleo.Datos MSDNLatam.Nucleo.Datos.SQL MSDNLatam.Nucleo.Datos.ADO MSDNLatam.Aplicacion MSDNLatam.Aplicacion.Interfaz MSDNLatam.Aplicacion.Reglas MSDNLatam.Aplicacion.Datos

Implementacin Fsica
DLLs Una DLL puede implementar uno o ms Namespaces Varias DLLs pueden implementar un

Namespace

Nada que ver con COM Las DLLs no se bloquean Puedo tener varias versiones en una mquina

Implementacin Fsica Assembly


Unidad de instalacin y versionamiento Coleccin de archivos fsicos Tiene un nmero de versin con formato XX.YY.Xx.yy XX e YY tienen que ser exactamente los mismos que tenga registrados los clientes

Servicio de Componentes (Framework .NET)


Provee:
Transacciones (DTC, TIP, XA, COMTI) Auto Completion

Activacin Just in time


Pooling de objetos Colas Eventos Seguridad basada en roles

Servicio de Componentes
Basados en COM+ Componentes .NET se hostean dentro de aplicaciones COM+ Tienen la capacidad de auto registrarse en COM y dentro de una aplicacin

Cmo seguimos?
Encontrar varios ejercicios de cdigo junto a esta presentacin Cuando los haya realizado, podr acceder a la siguiente presentacin de C# No olvide, los grupos de noticias estn all... Para que compartamos informacin

Finalmente...
Muchas gracias

Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA

Das könnte Ihnen auch gefallen