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