Actualizado el 18 de Junio del 2021 (Publicado el 16 de Abril del 2021)
1.546 visualizaciones desde el 16 de Abril del 2021
202,8 KB
47 paginas
Creado hace 15a (05/03/2010)
Integración de Sistemas
El lenguaje de
programación C#
Integración de Sistemas
Parte II. Diseño e implementación de
aplicaciones Web con .NET
Indice
Introducción
Compilador C#
Namespaces
Sistema de tipos unificado
Tipos predefinidos
Clases
Estructuras (struct)
Enumeraciones
Interfaces
Operadores
Entrada / Salida por Consola
Sentencias
Colecciones
Generics
Anexo I. Documentación XML en
.NET
Curso 2009 - 2010
1
Integración de Sistemas
Introducción
C# es un lenguage OO usado para desarrollar aplicaciones en la
plataforma .NET
Diseñado por Microsoft para combinar la potencia de C/C++, Java y
la productividad de Visual Basic
El objetivo de C# (y de la plataforma .NET) es reducir el tiempo de
desarrollo
Permitiendo a los desarrolladores invertir su tiempo trabajando en la lógica de
negocio en lugar de detalles de programación de bajo nivel
Introducción
En C# todo es un objeto
Todo hereda de System.Object
Es posible declarar un tipo primitivo (long) y trabajar con él de
forma eficiente. Además, es posible asignarlo a un objeto y
entonces será tratado como tal
Incluye mecanismos transparentes de boxing y unboxing (se ilustra
más adelante)
Los tipos primitivos sólo se tratan como objetos cuando la situación lo
requiere, mientras tanto pueden aplicárseles optimizaciones específicas
Curso 2009 - 2010
2
Integración de Sistemas
Introducción
Hola Mundo
class HelloWorld
{
* Class HelloWorld
* Description: simple C# example
*/
1. using System;
2. namespace Es.UDC.DotNet.CSharpTutorial
3. {
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19. }
}
#endregion
}
/*
#region Test code. Uncomment for testing
// entry point
public static void Main()
{
Console.WriteLine("Hello World!");
Console.ReadLine();
Introducción
Hola Mundo
La línea "using System;" significa que accederemos a miembros del
namespace System
Static es un modificador que indica que se trata de un método de clase
Main() es lo que es denomina el punto de entrada de la aplicación
Necesita del modificador static para evitar que para llamarlo haya que crear algún objeto de
la clase donde se haya definido.
C# es sensible a las mayúsculas
Los métodos y nombres de clases siguen sitáxis PascalCase (e.g., FindByUserIdentifier(…))
Los atributos siguen sitáxis camelCase (e.g., firstName)
Curso 2009 - 2010
3
Integración de Sistemas
Introducción
Sólo se admite herencia simple
Se admite implementación de múltiples interfaces
public class ClaseBase { … }
public interface IInterfaz { … }
public class ClaseDerivada : ClaseBase, IInterfaz { … }
Para evitar que una clase se pueda extender se indica con: sealed
Los métodos, por defecto, no pueden redefinirse (son sealed).
Para poder redefinir un método
Definirlo como virtual
En la redefinición del método indicar override
Introducción
La clase System.Object
Todos los tipos heredan de System.Object
public virtual bool Equals(object o)
public virtual int GetHashCode()
public virtual string ToString()
protected object MemberWiseClone()
public System.Type GetType()
protected virtual void Finalize()
public static bool Equals(object o1, object o2)
protected static bool ReferenceEquals(object o1, object o2)
Curso 2009 - 2010
4
Integración de Sistemas
Compilador C#
Los archivos C# tienen extensión .cs
Ubicación Compilador C#
C:\windows\Microsoft.NET\Framework\vn.n.nnn\csc.exe
Sintaxis
csc [opciones] fich1.cs [, fich2.cs]
Opciones
/out:ficheroSalida
/t:winexe
/t:library
/r:librería.dll
Por defecto se referencia a mscorlib.dll.
/main:clase
⇒ Todo esto se puede hacer desde el Visual Studio
Namespaces
Declaración:
namespace <NombreEspacio>
{
<Definición clases>
}
Anidación de namespaces válida
NmbEspacio1.NmbEspacio2.NmbEspacio3;
Referencia a namespaces externos
using
Alias: evitar conflictos entre namespaces
using <alias> = <NombreCompletoClase>;
Curso 2009 - 2010
5
Integración de Sistemas
Namespaces
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.IO;
static void Main(string[] args)
{
string username;
ArrayList namesCollection;
using SC = System.Collections;
using SIO = System.IO;
static void Main(string[] args)
{
string username;
string filename
SC.ArrayList namesCollection;
filename = SIO.Path.Combine( ... );
¿A qué namespace pertenece?
Sistema de Tipos Unificado
Tipos valor y referencia
Valor
Primitivos
Enumeraciones
Estructuras
Referencia
Raíz
String
Clases
Interfaces
Arrays
int i;
enum State { Off, On }
struct Point { int x, y; }
object
string
class Foo : Bar, IFoo {...}
interface IFoo : IBar {...}
string[] a = new string[10];
Curso 2009 - 2010
6
Integración de Sistemas
Sistema de Tipos Unificado
Boxing & Unboxing
Los tipos valor (struct, enum, int…) pueden ser convertidos en tipos
referencia (y viceversa) de forma automática mediante Boxing (y
Unboxing)
Boxing:
Encapsulación de tipo valor en tipo referencia
Ej: la siguiente sentencia “envuelve” el valor 3 en un objeto
object obj = 3;
Unboxing
Proceso inverso al boxing. Tratamiento de tipo referencia como tipo valor
Ej.: la siguiente sentencia “desenvuelve” el valor
int x = (int) obj;
Sistema de Tipos Unificado
Boxing & Unboxing
Boxing
Reserva espacio
Copia valor en ese espacio
Unboxing
Chequea tipo dato
Desenvuelve el valor
int i = 123;
object o = i; // boxing
int j = (int)o; // unboxing
Pila (stack)
Montón (heap)
i
o
j
123
123
(i boxed)
int
123
Curso 2009 - 2010
7
Integración de Sistemas
Tipos predefinidos
C#
Reference
Signed
Unsigned
Character
Floating-point
Logical
object, string
sbyte, short, int, long
byte, ushort, uint, ulong
char
float, double, decimal
bool
Importante: realmente se trata de alias a tipos proporcionados por el
sistema
int es un alias a System.Int32
Válido:
int entero = 100;
entero.ToString();
Tipos predefinidos
Tipo
Descripción
Bits
Rango
SByte
Byte
Int16
UInt16
Int32
UInt32
Bytes con signo
Bytes sin signo
Enteros cortos con signo
Enteros cortos sin signo
Enteros normales
Enteros normales sin signo
Int64
Enteros largos
Enteros largos sin signo
Reales con 7 dígitos
Reales de 15-16 dígitos
8
8
16
16
32
32
64
64
32
64
[-128…127]
[0…255]
[-32.768…32.767]
[0…65.535]
[-2.147.483.648…2.147.483.647]
[0…4.294.967.295]
[-9.223.372.036.854.775.808…
9.223.372.036.854.775.807]
[0…18.446.744.073.709.551.615]
[±1,5×10-45…±3,4×1038]
[±5,0×10-324 …± 1,7×10308]
UInt64
Single
Double
Decimal
Boolean
Char
String
Object
Reales de 28-29 dígitos significativos
128
[±1,0×10-28 …± 7,9×1028]
Valores lógicos
Caracteres Unicode
Cadenas de caracteres
32
16
true, false
[‘\u0000’, ‘\uFFFF’]
Variable
Valor máximo determinado por
memoria
Cualquier objeto
Variable
Cualquier objeto
Alias
sbyte
byte
short
ushort
int
uint
long
ulong
float
double
decimal
bool
char
string
object
Curso 2009 - 2010
8
Integración de Sistemas
Tipos predefinidos
Sufijos
Problema:
public static void Foo(int x){...}
public static void Foo(long x){...}
¿Llamada Foo(100)?
Tipo del literal entero es el primero que permita almacenarlo: int, uint,
long, ulong
Foo(100) llama al primer método
Sufijos
L (long, ulong), U (int, uint), UL (ulong)
F (float), D (double), M (decimal)
Ejemplo
Foo(100L) llama al segundo método
Clases
Las clases C# son similares a las clases Java
C# permite los siguientes miembros de clase (entre otros)
Constructores
Destructores
Campos
Propiedades
Métodos
Curso 2009 - 2010
9
Integración de Sistemas
Clases
Constructores
Llamadas entre constructores: this
class SuperClass
{
private string argument1;
public SuperClass() : this("<Default arg1>") { }
public SuperClass(string arg1)
{
this.argument1 = arg1;
Console.WriteLine("Arguments: " + argument1);
}
public static void Main()
{
// Creating a SuperClass instance
SuperClass sc = new SuperClass();
/* Shows:
* Arguments: <Default arg1>
*/
Console.ReadLine();
}
}
Clases
Constructores
Llamadas a la clase base: base
class ChildClass : SuperClass
{
private string argument2;
public ChildClass() : this("<Default arg2>") { }
public ChildClass(string arg2)
{
this.argument2 = arg2;
Console.WriteLine("Arguments: " + argument2);
}
public ChildClass(string arg1, string arg2)
: base(arg1)
{
this.argument2 = arg2;
Console.WriteLine("Arguments: " + argument2);
}
}
Curso 2009 - 2010
10
Integración de Sistemas
Clases
Constructores
Ejemplo
public static void Main()
{
SuperClass sc = new SuperClass();
/* Shows:
* Arguments: <Default arg1>
*/
ChildClass cc = new ChildClass();
/* Shows:
* Arguments: <Default arg1>
* Arguments: <Default arg2>
*/
ChildClass cc2 = new ChildClass("1", "2");
/* Shows:
* Arguments: 1
* Arguments: 2
*/
Console.ReadLine();
}
Clases
Constructores estáticos
Permiten inicialización de código, que se realizará una única vez
para la clase
Garantizan la ejecución antes de:
La creación de la primera instancia de la clase
El acceso a cualquier miembro estático
Un único constructor estático por clase
No pueden tener parámetros
Equivalente a bloque static de Java
Curso 2009 - 20
Comentarios de: Parte II. Diseño e implementación de aplicaciones Web con .NET - El lenguaje de programación C# (0)
No hay comentarios