In Troc Sharp

download In Troc Sharp

of 45

Transcript of In Troc Sharp

  • 7/23/2019 In Troc Sharp

    1/45

    FundamentosFundamentosbsicos delbsicos del

    lenguajelenguajeC#C#Daniel A. SearaDaniel A. Seara

    Director Regional MSDNDirector Regional MSDN

    Buenos Aires - ARGN!"NABuenos Aires - ARGN!"NA

    NDSotNDSot

  • 7/23/2019 In Troc Sharp

    2/45

    $arte %"ntroducci&n a C#

  • 7/23/2019 In Troc Sharp

    3/45

    Sistemas Orientados a Componentes

    ComModelo de componentes exitosoPlataforma comercial de componentes

    viablePermite la integracin y el re uso de

    componentes en una organizacin

  • 7/23/2019 In Troc Sharp

    4/45

    Sistemas Orientados a Componentes

    Sin embargo:CM est! mostrando signos de enve"ecimiento#CM no funciona como se espera en $nternetMayor uso de componentes % mayor in&erno de #''s

    ()n con *erramientas maduras las implementaciones noson f!ciles

    CM no es totalmente agnstico del lengua"e+ace algunas asunciones respecto del formato binario

    Soporta el menor com)n denominador

  • 7/23/2019 In Troc Sharp

    5/45

    Concepto de Componentes en .NET

    Se tomo lo me"or de CM, $nterfaces como contratos abstractos 'os componentes implementan y exponen interfaces-xploracin din!mica de las capacidades de los

    componentesComportamiento seg)n atributos .transacciones/

    Pooling/ 0001

    2 le agrega

    3erdadera orientacin a ob"etosModelo de eventos nativos4e uso de componentes entre lengua"es-xtensible a todo nivel

  • 7/23/2019 In Troc Sharp

    6/45

    Porque C# ? Primer lengua"e orientado a componentes5asado en la experiencia de CM,Soporte nativo para6amespaces

    3ersionamiento#esarrollo basado en atributos

    -l poder de C con la facilidad de 35

    Curva de aprendiza"e m7nima Muc*o m!s limpio 8ue C,, M!s estructurado 8ue 35

  • 7/23/2019 In Troc Sharp

    7/45

    Seccin 2:

    Elementos de C# 9orma y estructura -ntendiendo los tipos del sistema -ntendiendo el lengua"e C

  • 7/23/2019 In Troc Sharp

    8/45

    Forma y Estructura 6o *ay arc*ivos de encabezamiento .0+16o es necesario declarar las clases y los tipos

    'a declaracin y el cdigo est!n en un sololugar+ace 8ue el cdigo sea m!s consistente y

    mantenible9acilita la colaboracin a nivel e8uipo de

    desarrollo#eclaraciones accesibles: Metadata

    Compilacin condicional perosin macros

  • 7/23/2019 In Troc Sharp

    9/45

    Tipos deinidos por el Sistema

    Construido sobre el Common ;ype System Conceptos b!sicos:

    ;odo es un ob"eto;odo tiene *erencia impl7cita de System0b"ect

    #istincin entre valores y referencias

    Por valor: tipos simples/ enumeradores/ estructuras

    Por referencia: interfaces/ clases/ vectores

  • 7/23/2019 In Troc Sharp

    10/45

    Tipos Simples

    -nteros byte, sbyte.bit1 int, uint.?@bit1, long, ulong.>Abit1

    $--- 9loating Point double .precisin de =B=> d7gitos1

    float .precisin de D d7gitos1 6umEricos exactos

    Decimal.@< d7gitos signi&cativos1

    Cadenas de caracteres

    char string.referencia1

    5oolean bool.no es intercambiable con int1

  • 7/23/2019 In Troc Sharp

    11/45

    Enums

    Coleccin de elementos nombrados 9uertemente tipeados Me"or usar Fcolor0(zulF 8ue F?FMas legibilidad del cdigo;an liviano cmo un int

    -"emplo:

    enum Color

    { Rojo,Verde,Azul,Amarillo

    };

  • 7/23/2019 In Troc Sharp

    12/45

    !ectoresInician en cero, vinculados por tipo 5asadas en la clase SystemArrayde 06-; #eclaracin con tipo y forma/ pero sin l7mite

    int[] SingleDim;

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

    Creacin utilizando neGcon l7mites oinicializadores

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

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

  • 7/23/2019 In Troc Sharp

    13/45

    "nteraces #eclaracin del contrato sem!ntico entre partes Permite la orientacin a componentes

    #e&ne la estructura y la sem!ntica parapropsitos espec7&cos

    #e&nicin de mEtodos y propiedades abstractos Soporta *erencia .m)ltiple1 -"emplo:

    interface !"ersona#dad{

    int AnioDe$acimiento {get;set;}

    int #dad%&;}

  • 7/23/2019 In Troc Sharp

    14/45

    'ublic class "ersona (!"ersona#dad

    { 'ri)ate int iAnio;

    'ublic "ersona%&{

    }

    'ublic int AnioDe$acimiento { get { return iAnio;};

    set { iAnio * )alue;}; }

    'ublic int #dad%&

    { return +oday%& AnioDe$acimiento

    };}

    'ublic class "ersona (!"ersona#dad

    { 'ri)ate int iAnio;

    'ublic "ersona%&{

    }

    'ublic int AnioDe$acimiento { get { return iAnio;};

    set { iAnio * )alue;}; }

    'ublic int #dad%&

    { return +oday%& AnioDe$acimiento

    };}

    Clases $mplementacin de

    cdigo y datos $mplementa interfaces +erencia simple 'as clases contienen:Campos: variables miembroPropiedades: valores

    accedidos a travEs de getHsetMEtodos: funcionalidad-speciales: eventos/

    $ndexadores/ #elegates

  • 7/23/2019 In Troc Sharp

    15/45

    Estructuras In grupo de cdigo y datos

    Similar a las clases pero:6o permite *erenciaSiempre son pasadas por valor

    Clases vs0 -structuras

    -structuras Contenedor de datos liviano/ por valorClases ob"etos/ tipo referenciados

    #esarrolladores C,,J structno es un classdonde todo es '-blico

    -"emplo: struct "oint{ double .; double /; )oid 0o)e1y%double d., double d/&

    { .2*d.; /2*d/; }}

  • 7/23/2019 In Troc Sharp

    16/45

    Propiedades

    Mezcla entre campos y mEtodos Iso de propiedades para:$mplementacin de miembros slo

    lectura .omitiendo set13alidacin en asignacin3alores calculados o compuestos-xposicin de valores en las interfaces

    -"emplo: string $ame{

    get { return name; }set { name * )alue; }

    }

  • 7/23/2019 In Troc Sharp

    17/45

    "ndeadores 9orma consistente de construir

    contenedores 5asados en las propiedades Permite el acceso indexado a ob"etos

    contenidos -l 7ndice puede ser de cual8uier tipo -"emplo:object this3string inde45

    { get { returnDict!tem%inde4&; } set { DictAdd%inde4,)alue&; }

    }

  • 7/23/2019 In Troc Sharp

    18/45

    $ele%atesy E&entos #elegateSimilar a los punteros a funciones de C/ C,, 9uertemente tipeados delegate )oid Clic6ed%#lement e, "oint '&;

    -ventosModelo de eventos intr7nseco al lengua"e .por &n1#eclaracin y llamada en la clase fuente del

    evento

    1utton7nClic6 2* 0yClic68andler;e)ent Clic6 7nClic6;

    7nClic6%this,"ointer9ocation&;

  • 7/23/2019 In Troc Sharp

    19/45

    'tri(utos

    Similar a los atributos existentes de $#' (cceso declarativo a funcionalidad -xtensible: atributos Custom

    3+ransaction%+ransaction7'tionRe:uired&5class 0y1usinessCom'onent { }

    3"ersonirst$ame5 String Vorname;

    3"ersonirst$ame5 String "rimario$ome;

  • 7/23/2019 In Troc Sharp

    20/45

    "nstrucciones

    Muy C: control de Ku"o if !"ool e#$%&' { ((( } el)e { ((( }; )wit*+!a%&' { *a)e !*on)t&- (((; };

    w+ile !"ool e#$%&' { ((( };

    fo% !init&;!"ool te)t&;!modif.&' { ((( }; Do { ((( } w+ile !"ool e#$%&';

    6o muy C: lo*/!o"e*t&'{ ((( };

    Secciones cr7ticas *+e*/ed {(((}; n*+e*/ed { (((};

    Proteccin de sobrecargade enteros

  • 7/23/2019 In Troc Sharp

    21/45

    Foreac) $teracin de colecciones y vectores Pueden ser utilizados en clases propias (cceso slo lectura -"emplo:

    "oint35 "oints *

  • 7/23/2019 In Troc Sharp

    22/45

    So(recar%a de Operadores

    Casi todos los operadores pueden sersobrecargados 6o *ay sobrecarga para(signacionesperadores especiales

    .sizeof, ne=, is, ty'eof1

    -"emplo:

    +otal o'erator 2%int Amount, +otal t&{ ttotal 2* a;}

  • 7/23/2019 In Troc Sharp

    23/45

    'cceso a los miem(ros

    (dopcin del modelo C,,'ublictodos pueden acceder'rotected slo miembros de la *erencia

    'ri)ateslo miembros de la clase -xpande el modelo C,,:sealed no puede ser utilizado como clase

    baseinternalacceso p)blico solamente en el

    assembly

  • 7/23/2019 In Troc Sharp

    24/45

    Punteros* necesito punteros C soporta;ipo stringintr7nsecoModelo rico de colecciones Par!metros por referencia

    oid in*%ement%ef int ale, int ".' Par!metros de salida

    "ool addint a, int ", ot int *'

    -liminacin de la mayor7a de las causas

    Pero/ a)n disponible: unsafe

    unsafe )oid cry't%byte35 arr&{

    byte > b * arr;

    }

  • 7/23/2019 In Troc Sharp

    25/45

    +ane,o de Ecepciones Muy similar a C,,/ S-+

    Se debe leer as7: t%.e"ecutando este cdigo 000 000 Si se genera un error/ *at*+lo 8ue puedo llegar a

    mane"ar 000

    ...finall.perm7tame *acer alguna limpieza manual -"emplo:

    try{

    ?? c@digo}catch%Some#4ce'tion e&{ ?? Control de error}finally{

    ??salida correctaB}

  • 7/23/2019 In Troc Sharp

    26/45

    Namespaces

    9orma de agrupar 'L$C(M-6;- clasesIn namespace puede contener a clases y a

    otros namespace

    Similar al concepto de CMP6-6;- CMPero desacoplado de la de&nicin f7sica

    Se declaran con name)$a*e

    4eferenciados con using

  • 7/23/2019 In Troc Sharp

    27/45

    Comentarios -+

    9orma consistente de creardocumentacin en el cdigo HHH: ;odo lo comentado as7 va a

    parar a la metadata -"emplo:???summary??? #sta funci@n 'ermite calular el monto

    ??? final incluyendo todos los im'uestos??? ?summary'ublic decimal

  • 7/23/2019 In Troc Sharp

    28/45

    Seccin /: as 0erramientas

    9rameGorN S#O *erramientasb!sicasC Compiler

    3isual #ebugger6MaNe

    3isualStudio06-; agrega

    (mbiente visual(sistentes y plantillas(yuda $nteligente

  • 7/23/2019 In Troc Sharp

    29/45

    Frame1or S$3

    Contiene al compilador C .y 35/ C,,/QScript1Se e"ecuta desde la l7nea de comando

    3isual #ebugger ui#ebug(cceso completo al runtime y los metadatos

    +erramientas6MaNe/ Security/ Con&guration/ $'

    #isassembler/ 000 ratis para todos

  • 7/23/2019 In Troc Sharp

    30/45

    E,emplos

    +ola mundo

    namespace Consola

    { using System;

    public class Class1

    {

    public Class1()

    {}

    public static int Main(string[] args)

    {

    Console.WriteLine(!ola" mun#o);

    Console.$ea#();

    return %;

    }

    }

    }

    namespace Consola

    { using System;

    public class Class1

    {

    public Class1()

    {}

    public static int Main(string[] args)

    {

    Console.WriteLine(!ola" mun#o);

    Console.$ea#();

    return %;

    }

    }

    }

  • 7/23/2019 In Troc Sharp

    31/45

    E,emplos 4 Comentarios -+

    using SystemR

    HHH summaryT

    HHH Muestra en pantalla la frase F*ola/ mundoF

    HHH HsummaryT

  • 7/23/2019 In Troc Sharp

    32/45

    Parte 2

    $esarrollo de Componentes Contenido$ntroduccin a componentes 06-;$nteroperabilidad con CM,

  • 7/23/2019 In Troc Sharp

    33/45

    5. "ntroduccin a Componentes.NET

    rupo de clases 8ue est!n t7picamenteba"o un Namespacecom)n

    'as clases 8ue sean p)blicas se expondr!n*acia fuera del componente

    ;odo elemento p)blico de cada clase se

    ve fuera de ella 6o se registra el componente en ning)n

    lado

  • 7/23/2019 In Troc Sharp

    34/45

    E,emplo de Componente .NETen C#

  • 7/23/2019 In Troc Sharp

    35/45

    E,emplo de Componente .NET en C#

    namespace Componente1

    {

    using System;

    &&& 'summary

    &&& MiCmponente.

    &&& '&summary

    public class MiComp1 {

    public MiComp1()

    {

    }

    public System.String Mi*unc()

    &&& 'summary

    &&& +e,uel,e la -ora actual. &&& '&summary

    {

    return(System.+ateime./o0.oString());

    }

    }

    }

    namespace Componente1

    {

    using System;

    &&& 'summary

    &&& MiCmponente.

    &&& '&summary

    public class MiComp1 {

    public MiComp1()

    {

    }

    public System.String Mi*unc()

    &&& 'summary

    &&& +e,uel,e la -ora actual. &&& '&summary

    {

    return(System.+ateime./o0.oString());

    }

    }

    }

  • 7/23/2019 In Troc Sharp

    36/45

    Componentes .NET

    Qerar8u7a de *erencia #e&nicin de Namespaces

    $mplementacin f7sica $mplementacin de interfaces

  • 7/23/2019 In Troc Sharp

    37/45

    6erarqu7a de 0erencia

    $ndependiente de los Namespaces $ndependiente de la

    implementacin f7sica

  • 7/23/2019 In Troc Sharp

    38/45

    $einicin de NameSpaces

    Sirve para ordenar las clases.repaso1

    -s una agrupacin lgica

  • 7/23/2019 In Troc Sharp

    39/45

    E,emplo de $einicin de Namespaces

    MS#6'atam MS#6'atam06ucleo MS#6'atam06ucleo0#atos MS#6'atam06ucleo0#atos0SU'

    MS#6'atam06ucleo0#atos0(# MS#6'atam0(plicacion MS#6'atam0(plicacion0$nterfaz

    MS#6'atam0(plicacion04eglas MS#6'atam0(plicacion0#atos

  • 7/23/2019 In Troc Sharp

    40/45

    "mplementacin F7sica

    #''s Ina #'' puede implementar uno

    o m!s Namespaces

    3arias #''s pueden implementarun Namespace 6ada 8ue ver con CM

    'as #''s no se blo8uean Puedo tener varias versiones enuna m!8uina

  • 7/23/2019 In Troc Sharp

    41/45

    "mplementacin F7sica 8'ssem(ly

    Inidad de instalacin yversionamiento

    Coleccin de arc*ivos f7sicos;iene un n)mero de versin conformato VV0220Vx0yy

    VV e 22 tienen 8ue ser exactamentelos mismos 8ue tenga registrados losclientes

  • 7/23/2019 In Troc Sharp

    42/45

    Ser&icio de Componentes 89Frame1or .NET

    Provee:;ransacciones .#;C/ ;$P/ V(/ CM;$1

    Auto Completion (ctivacin Just in time

    Poolingde ob"etos

    Colas -ventos

    Seguridad basada en roles

  • 7/23/2019 In Troc Sharp

    43/45

    Ser&icio de Componentes

    5asados en CM, Componentes 06-; se hostean

    dentro de aplicaciones CM,

    ;ienen la capacidad de autoregistrarse en CM y dentro de unaaplicacin

  • 7/23/2019 In Troc Sharp

    44/45

    ;Cmo se%uimos?

    -ncontrar! varios e"ercicios decdigo "unto a esta presentacin

    Cuando los *aya realizado/ podr!acceder a la siguientepresentacin de C

    6o olvide/ los grupos de noticias

    est!n all7000 Para 8ue compartamosinformacin

  • 7/23/2019 In Troc Sharp

    45/45

    Finalmente...

    Muc*as gracias

    Daniel A. Seara

    Director Regional MSDN

    Buenos Aires - ARGENTINA