Académique Documents
Professionnel Documents
Culture Documents
El lenguaje de programacin C#
Integracin de Sistemas
Parte II. Diseo e implementacin de aplicaciones Web con .NET
Indice
Introduccin Compilador C# Namespaces Sistema de tipos unificado Tipos predefinidos Clases Estructuras (struct) Enumeraciones Interfaces Operadores Entrada / Salida por Consola Sentencias Colecciones Generics Anexo I. Documentacin XML en .NET
Integracin de Sistemas
Introduccin
C# es un lenguage OO usado para desarrollar aplicaciones en la plataforma .NET Diseado 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 lgica de negocio en lugar de detalles de programacin de bajo nivel
Introduccin
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. Adems, es posible asignarlo a un objeto y entonces ser tratado como tal
Incluye mecanismos transparentes de boxing y unboxing (se ilustra ms adelante) Los tipos primitivos slo se tratan como objetos cuando la situacin lo requiere, mientras tanto pueden aplicrseles optimizaciones especficas
Integracin de Sistemas
Introduccin
Hola Mundo
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. using System; namespace Es.UDC.DotNet.CSharpTutorial { /* * Class HelloWorld * Description: simple C# example */ class HelloWorld { #region Test code. Uncomment for testing // entry point public static void Main() { Console.WriteLine("Hello World!"); Console.ReadLine(); } #endregion } }
Introduccin
Hola Mundo
La lnea "using System;" significa que accederemos a miembros del namespace System Static es un modificador que indica que se trata de un mtodo de clase Main() es lo que es denomina el punto de entrada de la aplicacin
Necesita del modificador static para evitar que para llamarlo haya que crear algn objeto de la clase donde se haya definido.
Integracin de Sistemas
Introduccin
Slo se admite herencia simple Se admite implementacin de mltiples 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 mtodos, por defecto, no pueden redefinirse (son sealed). Para poder redefinir un mtodo
Definirlo como virtual En la redefinicin del mtodo indicar override
Introduccin
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)
Integracin de Sistemas
Compilador C#
Los archivos C# tienen extensin .cs Ubicacin 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:librera.dll
Por defecto se referencia a mscorlib.dll.
/main:clase
Namespaces
Declaracin:
namespace <NombreEspacio> { <Definicin clases> }
Integracin de Sistemas
Namespaces
using using using using using System; System.Collections.Generic; System.Text; System.Collections; System.IO; using SC = System.Collections; using SIO = System.IO;
static void Main(string[] args) { string username; string filename SC.ArrayList namesCollection;
A qu namespace pertenece?
Referencia
Raz String Clases Interfaces Arrays object string class Foo : Bar, IFoo {...} interface IFoo : IBar {...} string[] a = new string[10];
Integracin de Sistemas
object obj = 3;
Unboxing
Proceso inverso al boxing. Tratamiento de tipo referencia como tipo valor Ej.: la siguiente sentencia desenvuelve el valor
j 123
Integracin 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
Tipos predefinidos
Tipo SByte Byte Int16 UInt16 Int32 UInt32 Int64 UInt64 Single Double Decimal Boolean Char String Object Descripcin
Bytes con signo Bytes sin signo Enteros cortos con signo Enteros cortos sin signo Enteros normales Enteros normales sin signo Enteros largos Enteros largos sin signo Reales con 7 dgitos Reales de 15-16 dgitos Reales de 28-29 dgitos significativos Valores lgicos Caracteres Unicode Cadenas de caracteres Cualquier objeto
Bits
8 8 16 16 32 32 64 [-128127] [0255]
Rango
[018.446.744.073.709.551.615] [1,510-453,41038] [5,010-324 1,710308] [1,010-28 7,91028] true, false [\u0000, \uFFFF] Valor mximo determinado por memoria Cualquier objeto
Integracin 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 mtodo
Sufijos
L (long, ulong), U (int, uint), UL (ulong) F (float), D (double), M (decimal)
Ejemplo
Foo(100L) llama al segundo mtodo
Clases
Las clases C# son similares a las clases Java C# permite los siguientes miembros de clase (entre otros)
Constructores Destructores Campos Propiedades Mtodos
Integracin 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); } }
10
Integracin 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 estticos
Permiten inicializacin de cdigo, que se realizar una nica vez para la clase Garantizan la ejecucin antes de:
La creacin de la primera instancia de la clase El acceso a cualquier miembro esttico
Un nico constructor esttico por clase No pueden tener parmetros Equivalente a bloque static de Java
11
Integracin de Sistemas
Clases
Constructores estticos
Llamada automtica al acceder por primera vez a la clase
public class LogManager { private static FileStream logFile; // Static Constructor opens the file static LogManager() { logFile = File.Open("logFile.dat", FileMode.Create); } public LogManager() { logFile.WriteLine(System.DateTime.Now.ToString() + " Instance created"); } }
Clases
Destructores
Llamado automticamente por Garbage Collector
public class LogManager { ~LogManager() { logFile.WriteLine(System.DateTime.Now.ToString() + " Instance Disposed"); logFile.Close(); } }
12
Integracin de Sistemas
Clases
Campos constantes
Se evalan en tiempo de compilacin Son implcitamente estticas (error si se usa static explcitamente) Ejemplo
public public public public const const const const string string double double VERSION = "1.0.0"; URI = "http://" + "www.google.es"; PI = 3.14159265358979; UNO = Math.Cos(0); //ERROR
Clases
Campos de slo lectura
Similares a las constantes, pero
Se inicializan en tiempo de ejecucin (vs. compilacin)
Evitan necesidad de recompilar clientes
Pueden ser estticas o por instancia Una vez inicializadas, no pueden modificarse
public readonly double UNO = Math.Cos(0); public static readonly double CERO = Math.Sin(0);
13
Integracin de Sistemas
Clases
Properties
Frecuentemente, en una clase, declaramos un atributo como privado y proporcionamos mtodos GetXXX / SetXXX para acceder a l. Es un tipo de encapsulacin.
Buena prctica de programacin Los atributos no son accesibles desde fuera de la clase Es necesario utilizar los mtodos GetXXX / SetXXX
Clases
Properties
Ej. Encapsulacin sin properties. Definicin:
/* Traditional Encapsultation Without Properties */ class CircleWithGetSet { private double radius; public double GetRadius() { return radius; } public void SetRadius(double radius) { this.radius = radius; } << ... >> }
14
Integracin de Sistemas
Clases
Properties
Ej. Encapsulacin sin properties. Acceso:
public static void Main() { CircleWithGetSet circle = new CircleWithGetSet(); // Set circle.SetRadius(1); // Get Console.WriteLine("Radius: " + circle.GetRadius()); }
Clases
Properties
Ej. Encapsulacin con properties. Definicin:
/* Encapsulating Type State with Properties */ class CircleWithProperties { private double radius; public double Radius { get { return radius; } /* NOTE: 'value' is a C# reserved word. */ set { radius = value; } } << ... >> }
15
Integracin de Sistemas
Clases
Properties
Ej. Encapsulacin con properties. Acceso:
public static void Main() { CircleWithProperties circle = new CircleWithProperties(); // Set circle.Radius = 1; // Get Console.WriteLine("Radius: " + circle.Radius); }
Clases
Properties
Una propiedad puede ser de slo lectura / slo escritura. Basta con definir nicamente el accessor get / set Son PascalCase Externamente son accedidas como si de un campo pblico se tratase, pero internamente es posible asociar cdigo a ejecutar en cada asignacin o lectura de su valor
16
Integracin de Sistemas
Clases
Properties
C# 3.0 incorpora Automatic Properties
No es necesario declarar explcitamente el atributo privado ni las operaciones de asignacin y retorno
El compilador los generar automticamente
Es obligatorio definir ambos mtodos de acceso (accessors) get / set. Sin embargo pueden construirse properties de slo lectura / solo escritura utilizando el modificador de acceso private
public string Radius { private get; set; }
Clases
Properties
Para ejemplo ms complejos, debemos utilizar las propiedades tradicionales
Atajo: En VS, sobre el atributo privado:
Refactor > Encapsulate Field Genera gdigo base, que podemos completar
public double Radius { private get { return radius; } set { if (value < 0) { this.radius = 0; } else { this.radius = value; } } }
17
Integracin de Sistemas
Clases
Properties
Es posible definir propiedades abstractas
public abstract class AnAbstractClass { public abstract string AbstractProp { get; set; } << ... >> }
Y tambin en Interfaces
public interface IAnInterface { public string APropertie { get; set; } << ... >> }
Clases
Mtodos
Redefinicin de mtodos: virtual & override
public class Product { public virtual String GetReference() { return barCode; } } public class Book : Product { public override String GetReference() { return ISBN; } }
18
Integracin de Sistemas
Clases
Mtodos
Modificadores de acceso
private:
Slo cdigo dentro de la misma clase contenedora tiene acceso a un miembro privado
protected:
Miembros accesibles desde la clase que los contiene o desde clases derivadas de sta
internal:
Miembros accesibles desde el mismo assembly
protected internal:
Miembros accesibles desde el mismo assembly o clases derivadas de la clase que lo contiene (protected + internal)
public:
No hay restricciones de acceso
Clases
Mtodos
Paso de parmetros
Tipos primitivos se pasan por valor
Para pasar por referencia: ref
public class Util { public void Swap(ref int x, ref int y) { int temp; temp = x; x = y; y = temp; } }
19
Integracin de Sistemas
Clases Abstractas
Una clase abstracta no puede ser instanciada Est pensada para ser usada como clase base Puede contener mtodos abstractos y no abstractos Similar a una interfaz No puede ser sealed Todo mtodo definido como abstract es implcitamente virtual
Clases Abstractas
public abstract class AbstractSQLAccountDAO : IAccountDAO { public abstract List<AccountVO> FindByUserIdentifier( DbConnection connection, DbTransaction transaction, long userIdentifier, int startIndex, int count); <<...>> } public class CCSqlServerAccountDAO : AbstractSQLAccountDAO { public override List<AccountVO> FindByUserIdentifier( DbConnection connection, DbTransaction transaction, long userIdentifier, int startIndex, int count) { <<...>> } }
20
Integracin de Sistemas
Clases Sealed
Es una clase que no se puede extender Las clases sealed no pueden ser abstractas Todas las estructuras son sealed Por qu "cerrar" una clase?
Para prevenir que sea extendida de forma no intencionada
Estructuras (struct)
Similares a las clases pero
Requisitos de almacenamiento menores Paso por valor, no referencia No pueden extender ningn tipo (heredan directamente de System.ValueType) Ningn tipo puede heredar de ellas
21
Integracin de Sistemas
Estructuras (struct)
Mismos miembros que una clase Modificadores de acceso vlidos
private (defecto), internal o public
Estructuras (struct)
public struct Point { private int x, y; public Point(int x, int y) { this.x = x; this.y = y; } public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } <<...>> }
22
Integracin de Sistemas
Enumeraciones
Estructuras con explicitacin de elementos
Evitan uso nmeros mgicos Facilitan legibilidad del cdigo Participan en el mecanismo de comprobacin de tipos
Slo podrn contener campos pblicos constantes y estticos El tipo por defecto de las constantes que forman una enumeracin es int, aunque puede drseles cualquier otro tipo bsico entero:
int, byte, sbyte, short, ushort, uint, long, ulong
Enumeraciones: ejemplo
Declaracin
public enum MessageType : int { INFO = 1, WARNING = 2, ERROR = 3 }
Uso
MessageType messageType = MessageType.WARNING;
23
Integracin de Sistemas
Interfaces
Similar a la definicin de un contrato
Pueden incluir mtodos, propiedades, eventos No pueden incluir operadores, constructores o destructores. Cualquier implementacin de la interfaz debe dar soporte a todas las partes del contrato Miembros de una interfaz son por defecto public y abstract
Proporcionan polimorfismo
Diferentes clases y estructuras pueden implementar la misma interfaz
No contienen implementacin
Interfaces
Declaracin
public interface IUserProfileDAO { // Interface methods void Create(...); void Delete(...); // Interface properties UserProfile LastUser { get; set; } }
Implementacin
public class UserProfileDAO : IUserProfileDAO { }
24
Integracin de Sistemas
Operadores
Aritmticos
+, -, *, /, %
Asignacin
+=, -=, *=, /=, %=, ++, --
Comparacin
==, !=, <, >, <=, >=
Lgicos
&, &&, |, ||, ~, !, ^
Operadores
Obtencin de informacin sobre tipos
typeof(Type t)
Obtiene el objeto System.Type para un tipo
Type t = typeof(SampleClass); // Alternatively, you could use // SampleClass obj = new SampleClass(); // Type t = obj.GetType();
<expression> is <type> as
Similar a proceso de casting, pero devuelve null en lugar de InvalidCastException
25
Integracin de Sistemas
Salida
Console.Write(); Console.WriteLine();
Ej:
Console.Write("Current Balance: {0:C}.", balance)
Opcin 2
Console.Write("Text " + var0.ToString("format"))
Si no se especifica formato, puede obviarse la llamada a ToString()
Ej:
Console.Write("Current Balance: " + balance.ToString("C"));
26
Integracin de Sistemas
Nmero
C D F P H Moneda Decimal Punto Fijo Porcentaje Hexadecimal
Fecha
S D t T F Short Date Long Date Short time Long Time Full Date
Sentencias
Condicionales
if switch
Control de Excepciones
try ...catch...finally throw
Iterativas
while do for foreach
Otras
lock using
27
Integracin de Sistemas
Sentencias condicionales. if
Sintaxis General
if (condition) <statementsIF> else <statementsELSE>
28
Integracin de Sistemas
do { <statements> } while(condition)
29
Integracin de Sistemas
Ejemplo
String[] daysOfWeek = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; // Print the days of the week foreach (string day in daysOfWeek) { Console.WriteLine(day); }
30
Integracin de Sistemas
31
Integracin de Sistemas
32
Integracin de Sistemas
Sentencias. lock
Permite definir regiones crticas dentro de aplicaciones multithreading
Previene la corrupcin de datos
Sentencias. lock
public class CheckingAccount { decimal balance; public void Deposit(decimal amount) { lock (this) { balance += amount; } } public void Withdraw(decimal amount) { lock (this) { balance -= amount; } } }
33
Integracin de Sistemas
Sentencias. using
Objetos que deben limpiarse una vez usados, deberan implementar la interfaz System.IDisposable
nico mtodo: Dispose()
Sentencia using permite crear una instancia, emplearla y asegurar que tras ello el mtodo Dispose() se llama
Similar a bloque finally en la gestin de excepciones
Sentencias. using
public class MyResource : IDisposable { public void MyResource() { // Acquire valuable resource } public void Dispose() { // Release valuable resource } public void DoSomething() { // Do something } } <<...>> static void Main() { using (MyResource r = new MyResource()) { r.DoSomething(); } // r.Dispose() is called }
34
Integracin de Sistemas
Colecciones
interface IEnumerable { IEnumerator GetEnumerator(); }
Colecciones: System.Collection
Clases
ArrayList Hashtable DictionaryBase SortedList Queue Stack
Interfaces
ICollection IComparer IDictionary IEnumerable IEnumerator IList
35
Integracin de Sistemas
Colecciones: ArrayList
[Serializable] public class ArrayList : IList, ICollection, IEnumerable, ICloneable
Propiedades
Capacity Count Item[index] -- Indexer
Colecciones: ArrayList
Mtodos
Add(object) AddRange(Collection) Clear() Contains(object) IndexOf(object) Remove(object) RemoveAt(int) Sort() Reverse() GetEnumerator()
36
Integracin de Sistemas
Colecciones: ArrayList
ArrayList months = new ArrayList(); // Populate ArrayList... months.Add("January"); <<...>> months.Add("December"); // Access data with IEnumerator... IEnumerator enumerator = months.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current); } // Access data with foreach foreach (String month in months) { Console.WriteLine(month); }
Colecciones: Hashtable
Representa una coleccin de pares de clave y valor organizados en funcin del cdigo hash de la clave
[Serializable] public class Hashtable : IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback, ICloneable
Propiedades
Count IsFixedSize IsReadOnly Keys Values
37
Integracin de Sistemas
Colecciones: Hashtable
Mtodos
Contains() ContainsKey(object) ContainsValue(object) GetHash(object) ...
Colecciones: Hashtable
Ejemplo
public class Languages { private static readonly Hashtable LANGUAGES = new Hashtable(); private static readonly ArrayList LANGUAGES_en = new ArrayList(); private static readonly ArrayList LANGUAGES_es = new ArrayList(); // static constructors initializes hashtable values static Languages() { // ArrayLists stores the ListBox information LANGUAGES_en.Add(new ListItem("English", "en")); LANGUAGES_en.Add(new ListItem("Spanish", "es")); LANGUAGES_es.Add(new ListItem("Ingls", "en")); LANGUAGES_es.Add(new ListItem("Espaol", "es")); //Key: "en" Value: ArrayList with english information LANGUAGES.Add("en", LANGUAGES_en); //Key: "es" Value: ArrayList with spanish information LANGUAGES.Add("es", LANGUAGES_es); } }
38
Integracin de Sistemas
Generics
Caracterstica de Common Language Runtime, que permite que las clases, estructuras, interfaces y mtodos tengan parmetros de tipo genrico para los tipos de datos que almacenan y manipulan
Los tipos genricos son una forma de tipos parametrizados
Generics
Ejemplo sin utilizar Generics
public class List { private object[] elements; private int count = 0; <<...>> public void Add(object element) { if (count == elements.Length) { Resize(); } elements[count++] = element; } /* Allows indexer access to class List */ public object this[int index] { get { return elements[index]; } set { elements[index] = value; } } } // array to store list elements // number of elements in the list
39
Integracin de Sistemas
Generics
Uso de la lista implementada sin Generics
List intList = new List(); intList.Add(1); intList.Add(2); intList.Add("Three"); int i = (int)intList[0]; // Argument is boxed // Argument is boxed // Should be an error // Cast required
Generics
Implementacin de la clase Lista utilizando Generics
public class List<ItemType> { private ItemType[] elements; private int count = 0; <<...>> public void Add(ItemType element) { if (count == elements.Length) { Resize(); } elements[count++] = element; } /* Allows indexer access to class List */ public ItemType this[int index] { get { return elements[index]; } set { elements[index] = value; } } } // array to store list elements // number of elements in the list
40
Integracin de Sistemas
Generics
Uso de la lista implementada utilizando Generics
List<int> intList = new List<int>(); intList.Add(1); intList.Add(2); //intList.Add("Three"); int i = intList[0]; // No boxing // No boxing // Compile-time error // No cast required
Generics
Por qu utilizar Generics?
Comprobacin de tipos en tiempo de compilacin Rendimiento (no boxing, no downcasts) Reduce la complejidad del cdigo
41
Integracin de Sistemas
Generics
Los tipos genricos pueden aplicarse a
Clases, estructuras, interfaces,
class Dictionary<KeyType, ValueType> {...} struct Pair<FirstType, SecondType> {...} interface IComparer<T> {...} << ... >> Dictionary<string, Customer> customerLookupTable; Dictionary<string, List<Order>> orderLookupTable; Dictionary<int, string> numberSpellings;
Generics
Los tipos genricos pueden aplicarse a
y mtodos
class Array { public static T[] Create<T>(int size) { return new T[size]; } public static void Sort<T>(T[] array) { ... } } << ... >> string[] names = Array.Create<string>(3); names[0] = "Jones"; names[1] = "Anderson"; names[2] = "Williams"; Array.Sort(names);
42
Integracin de Sistemas
Anexo I
43
Integracin de Sistemas
Etiquetas XML
Etiquetas de uso genrico
<summary>
Indica un resumen sobre el significado del elemento al que precede Se puede emplear junto con la etiqueta <remarks> para aadir informacin complementaria sobre el propio elemento.
///<summary> /// Esta clase es de muestra para la documentacin ///</summary> ///<remarks> Esta clase no realiza ninguna accin, slo /// sirve de muestra</remarks> public class Documentacion { public Documentacion() { // TODO: Add constructor logic here } }
Etiquetas XML
Etiquetas de uso genrico
<see>
Indica hipervnculos a otros elementos de la documentacin
<seealso>
Indica un elemento cuya documentacin guarda relacin con la del elemento al que precede
Ambas etiquetas carecen de contenido y el nombre del elemento al que remiten se indica en su atributo cref.
/// <summary> /// Muestra por la salida estndar el mensaje Hola!. /// Si no sabe como se escribe en pantalla puede consultar la /// documentacin del mtodo <see cref="System.Console.WriteLine"/>. /// </summary> /// <seealso cref="System.Console"/> public static void Saluda() { Console.WriteLine("Hola!"); }
44
Integracin de Sistemas
Etiquetas XML
Etiquetas de uso genrico
<permission>
Indica qu permiso necesita un elemento para poder funcionar Atributo cref suele usarse para indicar el tipo del permiso.
/// <summary> Mtodo para guardar en disco </summary> /// <permission /// cref="System.Security.Permissions.FileIOPermission"> /// Debe de tener permisos de escritura en la /// ruta especificada /// </permission> public void SaveSomething(String path){ ... }
Etiquetas XML
Etiquetas relativas a excepciones
<exception>
Especifica qu excepciones se pueden producir en un mtodo
/// <exception cref="ConfigurationErrorsException"> Se produce esta /// excepcin cuando el parmetro especificado no est definido /// </exception> public String GetParameter(String paramName) { try { String paramValue = ConfigurationManager. AppSettings["nombreParametro"]; << ... >> } catch (ConfigurationErrorsException ex) { throw ex; } }
45
Integracin de Sistemas
Etiquetas XML
Etiquetas relativas a mtodos
<param>
Documenta el significado de un parmetro de un mtodo
<paramref>
Referencia a parmetros de mtodos
<returns>
Especifica el valor de retorno de un mtodo
/// <summary> Mtodo que muestra por pantalla un texto con un determinado color /// /// </summary> /// <param name="texto"> Texto a mostrar </param> /// <param name="color"> /// Color con el que mostrar el <paramref name="texto"/> indicado /// </param> /// <returns> Indica si el mtodo se ha ejecutado con xito o no </returns> Boolean MuestraTexto(string texto, Color color) { ... }
Etiquetas XML
Etiquetas relativas a formato
<example>
Ejemplo sobre cmo usar el elemento al que precede
<code>
Se emplea dentro de etiquetas <example> Delimita textos que han de ser considerados fragmentos de cdigo fuente
<c>
Indica que el texto dentro de una descripcin debe ser marcado como cdigo
<para>
Ayuda a separar la seccin que se est escribiendo en prrafos.
46
Integracin de Sistemas
Etiquetas XML
Etiquetas relativas a formato
///<summary> /// <para>Crea una nueva instancia de la clase Cliente</para> /// <para>Otro parrafo</para> ///</summary> ///<example> Ejemplo de cmo realizar la instancia del objeto /// <c>Cliente</c> /// <code> /// Cliente objCliente = new Cliente(); /// </code> ///</example>
Etiquetas XML
Etiquetas relativas a propiedades
<value>
En el caso de las propiedades, este elemento proporciona una descripcin del valor que se est estableciendo o recuperando
/// <summary> /// Almacena /// </summary> /// <value> Edad public int Edad { set { edad = get { return } la edad de una persona. de la persona representada </value>
value; } edad; }
47