Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA...

45
Fundamentos Fundamentos básicos del básicos del lenguaje lenguaje C# C# Daniel A. Seara Daniel A. Seara Director Regional MSDN Director Regional MSDN Buenos Aires - ARGENTINA Buenos Aires - ARGENTINA NDSoft NDSoft

Transcript of Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA...

Page 1: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Fundamentos Fundamentos básicos del básicos del lenguajelenguaje C# C#

Daniel A. SearaDaniel A. Seara

Director Regional MSDNDirector Regional MSDN

Buenos Aires - ARGENTINABuenos Aires - ARGENTINA

NDSoftNDSoft

Page 2: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Parte 1Introducción a C#

Page 3: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Sistemas Orientados a Componentes

• ComModelo de componentes exitosoPlataforma comercial de componentes

viablePermite la integración y el “re uso” de

componentes en una organización

Page 4: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Sistemas Orientados a Componentes

• Sin embargo:COM está mostrando signos de envejecimiento

DCOM no funciona como se espera en InternetMayor uso de componentes = mayor “infierno de DLLs”Aún con herramientas maduras las implementaciones no

son fácilesCOM no es totalmente “agnóstico” del lenguaje

Hace algunas asunciones respecto del formato binarioSoporta el menor común denominador

Page 5: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Concepto de Componentes en .NET

• Se tomo lo mejor de COM+ Interfaces como contratos abstractos Los componentes implementan y exponen

interfaces Exploración dinámica de las capacidades de los

componentes Comportamiento según atributos (transacciones,

“Pooling”, ...)

• Y le agrega Verdadera orientación a objetos Modelo de eventos nativos Re uso de componentes entre lenguajes Extensible a todo nivel

Page 6: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Porque C# ?• Primer lenguaje orientado a

componentesBasado en la experiencia de COM+Soporte nativo para

NamespacesVersionamientoDesarrollo basado en atributos

• El poder de C con la facilidad de VB• Curva de aprendizaje mínima• Mucho más limpio que C++• Más estructurado que VB

Page 7: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Sección 2: Elementos de C#

• Forma y estructura• Entendiendo los tipos del sistema• Entendiendo el lenguaje C#

Page 8: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Forma y Estructura • No hay archivos de encabezamiento (.H)

No es necesario “declarar” las clases y los tipos

• La declaración y el código están en un solo lugarHace que el código sea más consistente y

mantenibleFacilita la colaboración a nivel equipo de

desarrolloDeclaraciones accesibles: Metadata

• Compilación condicional pero sin macros

Page 9: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Tipos definidos por el Sistema

• Construido sobre el Common Type System• Conceptos básicos:

Todo es un objeto

Todo tiene herencia implícita de System.Object

Distinción entre valores y referencias

Por valor: tipos simples, enumeradores, estructuras

Por referencia: interfaces, clases, vectores

Page 10: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Tipos Simples• Enteros

byte, sbyte (8bit), short, ushort (16bit) int, uint (32bit), long, ulong (64bit)

• IEEE Floating Point double (precisión de 15-16 dígitos) float (precisión de 7 dígitos)

• Numéricos exactos Decimal (28 dígitos significativos)

• Cadenas de caracteres char string (referencia)

• Boolean bool (no es intercambiable con int)

Page 11: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Enums• Colección de elementos nombrados• Fuertemente tipeados• Mejor usar "color.Azul" que "3"

Mas legibilidad del código Tan liviano cómo un int

• Ejemplo:

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

Page 12: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Vectores• Inician en cero, vinculados por tipo• Basadas en la clase System.Array de .NET• Declaración con tipo y forma, pero sin límite

int[] SingleDim; int[,] TwoDim; int [][] Jagged;

• Creación utilizando new con límites 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}

Page 13: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Interfaces• Declaración del contrato semántico entre partes

Permite la orientación a componentes

• Define la estructura y la semántica para propósitos específicos

• Definición de métodos y propiedades abstractos• Soporta herencia (múltiple)• Ejemplo:

interface IPersonaEdad{ int AnioDeNacimiento {get; set;} int Edad(); }

Page 14: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

public class Persona : IPersonaEdad{ private int iAnio;

public Persona() { }

public int AnioDeNacimiento

{ get { return iAnio;}; set { iAnio = value;}; }

public int Edad() { return Today()- AnioDeNacimiento }; }

public class Persona : IPersonaEdad{ private int iAnio;

public Persona() { }

public int AnioDeNacimiento

{ get { return iAnio;}; set { iAnio = value;}; }

public int Edad() { return Today()- AnioDeNacimiento }; }

Clases• Implementación de

código y datos• Implementa interfaces• Herencia simple• Las clases contienen:

Campos: variables miembro Propiedades: valores

accedidos a través de get/set

Métodos: funcionalidad Especiales: eventos,

Indexadores, Delegates

Page 15: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Estructuras• Un grupo de código y datos

Similar a las clases pero:No permite herenciaSiempre son pasadas por valor

Clases vs. EstructurasEstructuras Contenedor de datos liviano, por valorClases objetos, tipo referenciados

• Desarrolladores C++! struct no es un class donde todo es público

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

Page 16: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Propiedades• Mezcla entre campos y métodos• Uso de propiedades para:

Implementación de miembros sólo lectura (omitiendo set)

Validación en asignaciónValores calculados o compuestosExposición de valores en las interfaces

• Ejemplo: string Name { get { return name; } set { name = value; } }

Page 17: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

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]

{ get { return Dict.Item(index); } set { Dict.Add(index,value); } }

Page 18: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

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 intrínseco al lenguaje (por fin) Declaración y llamada en la clase fuente del

eventoButton.OnClick += MyClickHandler;event Click OnClick;...

OnClick(this,PointerLocation);

Page 19: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

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;

Page 20: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

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 críticas checked {...}; unchecked { ...};

Protección de sobrecarga de enteros

Page 21: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Foreach• Iteración de colecciones y vectores• Pueden ser utilizados en clases propias• Acceso sólo lectura• Ejemplo:

Point[] Points = GetPoints();foreach( Point p in Points ){ MyPen.MoveTo(Point.x,Point.y);}

Page 22: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Sobrecarga de Operadores• Casi todos los operadores pueden ser

sobrecargados• No hay sobrecarga para

AsignacionesOperadores especiales

(sizeof, new, is, typeof)• Ejemplo:

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

Page 23: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Acceso a los miembros

• Adopción del modelo C++public todos pueden accederprotected sólo miembros de la herenciaprivate sólo miembros de la clase

• Expande el modelo C++:sealed no puede ser utilizado como clase

baseinternal acceso público solamente en el

assembly

Page 24: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Punteros, necesito punteros• C# soporta

Tipo string intrínseco Modelo rico de colecciones Parámetros por referencia

void increment(ref int value, int by)

Parámetros de salidabool add(int a, int b, out int c)

• Eliminación de la mayoría de las causas• Pero, aún disponible: unsafe

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

Page 25: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Manejo de Excepciones• Muy similar a C++, SEH• Se debe leer así:

try ejecutando este código ... ... Si se genera un error, catch lo que puedo llegar a

manejar ... ...finally permítame hacer alguna limpieza manual

• Ejemplo:try { //... código}catch(SomeException e){ //... Control de error}finally{ //...salida “correcta”}

Page 26: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Namespaces

• Forma de agrupar LÓGICAMENTE clasesUn namespace puede contener a clases y

a otros namespaceSimilar al concepto de COMPONENTE COMPero desacoplado de la definición física

• Se declaran con namespace• Referenciados con using

Page 27: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Comentarios XML• Forma consistente de crear

documentación en el código• ///: Todo lo comentado así va a

parar a la metadata• Ejemplo:///<summary>/// Esta función permite calular el monto /// final incluyendo todos los impuestos /// </summary>public decimal GetTotalValue(){}

Page 28: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Sección 3: Las Herramientas

• Framework SDK – herramientas básicasC# CompilerVisual DebuggerNMake

• VisualStudio.NET agregaAmbiente visual Asistentes y plantillasAyuda “Inteligente”

Page 29: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Framework SDK• Contiene al compilador C# (y VB, C++,

JScript)Se ejecuta desde la línea de comando

• Visual Debugger – GuiDebugAcceso completo al runtime y los

metadatos• Herramientas

NMake, Security, Configuration, IL Disassembler, ...

• Gratis para todos

Page 30: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Ejemplos

• “Hola mundo”

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

public static int Main(string[] args) {

Console.WriteLine("Hola, mundo");Console.Read();

return 0; } }}

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

public static int Main(string[] args) {

Console.WriteLine("Hola, mundo");Console.Read();

return 0; } }}

Page 31: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Ejemplos – Comentarios XML

using System;

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

Page 32: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Parte 2Desarrollo de Componentes• Contenido

Introducción a componentes .NETInteroperabilidad con COM+

Page 33: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

1. Introducción a Componentes .NET

• Grupo de clases que están típicamente bajo un Namespace común

• Las clases que sean públicas se expondrán hacia fuera del componente

• Todo elemento “público” de cada clase se ve fuera de ella

• No se registra el componente en ningún lado

Page 34: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Ejemplo de Componente .NET en C#

Page 35: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

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()); } }}

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()); } }}

Page 36: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Componentes .NET

• Jerarquía de herencia• Definición de Namespaces• Implementación física• Implementación de interfaces

Page 37: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Jerarquía de Herencia

• Independiente de los Namespaces• Independiente de la

implementación física

Page 38: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Definición de NameSpaces

• Sirve para ordenar las clases (repaso)

• Es una agrupación lógica

Page 39: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Ejemplo de Definición 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

Page 40: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Implementación Física

• DLLs• Una DLL puede implementar uno

o más Namespaces• Varias DLLs pueden implementar

un Namespace• Nada que ver con COM• Las DLLs no se bloquean• Puedo tener varias versiones en

una máquina

Page 41: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Implementación Física - Assembly

• Unidad de instalación y versionamiento

• Colección de archivos físicos• Tiene un número de versión con

formato XX.YY.Xx.yy• XX e YY tienen que ser

exactamente los mismos que tenga registrados los clientes

Page 42: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Servicio de Componentes - (Framework .NET)

Provee: Transacciones (DTC, TIP, XA, COMTI) Auto Completion Activación “Just in time” Pooling de objetos Colas Eventos Seguridad basada en roles

Page 43: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

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 aplicación

Page 44: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

¿Cómo seguimos?

• Encontrará varios “ejercicios” de código junto a esta presentación

• Cuando los haya realizado, podrá acceder a la siguiente presentación de C#

• No olvide, los grupos de noticias están allí... Para que compartamos información

Page 45: Fundamentos básicos del lenguaje C# Daniel A. Seara Director Regional MSDN Buenos Aires - ARGENTINA NDSoft.

Finalmente...

• Muchas gracias

Daniel A. SearaDirector Regional MSDN Buenos Aires - ARGENTINA