Sunteți pe pagina 1din 64

Estndares

de
Diseo
y
Programacin .Net
Lenguaje C#

Estndares de Diseo y Programacin .Net Lenguaje C#

Estndares de Diseo y Programacin .Net Lenguaje C#

1. INTRODUCCIN
El uso de estndares de programacin o codificacin estndar, es de gran
relevancia, al momento de entregar un producto de software, lo cual
repercute en la calidad de ste. El uso de un estndar de programacin
permite mejorar la prctica, elusin de problemas (ambigedad) en el
cdigo, logrando un conocimiento y un seguimiento ms fcil para el equipo
de desarrollo.
En este documento se da a conocer un estndar de codificacin orientado
principalmente al lenguaje de programacin C#.
Las tcnicas de codificacin aqu definidas no pretenden formar un conjunto
inflexible de los estndares de codificacin. Ms bien intentan servir de gua
en el desarrollo de un estndar de codificacin para un proyecto especfico
de software.

2. OBJETIVO
El principal objetivo de este documento es la de establecer estndares de
codificacin que permita el uso de buenas prcticas y recomendaciones de
diseo, para lograr mayores niveles de calidad en los productos de software
desarrollados.
La utilizacin de estndares debe mostrar efectos positivos sobre:

Disminucin de errores/bugs, especialmente en aquellos difciles de


individualizar.

Mantenimiento del cdigo estructurado de acuerdo a las guas de diseo.

Mantenimiento del cdigo escrito de acuerdo a un estilo estandarizado.

Performance de la aplicacin desarrollada con prcticas eficientes del


lenguaje.

3. ALCANCE
Este documento tiene como alcance establecer una gua de desarrollo en el
lenguaje C# y .Net Framework Common Type System, con el fin de
uniformizar criterios para la generacin de cdigo.

Estndares de Diseo y Programacin .Net Lenguaje C#


4. ABREVIATURAS
La siguiente tabla resume el uso de abreviaturas usadas en este
documento:
Abreviatur
Descripcin
a
Application Server Page, pginas Web
ASP
con .Net
AVI
Archivo de video de Windows
BAT
Archivo por lotes MS-DOS
CAB
Archivo comprimido CAB Station
CSS
Pginas de estilo
DAO
Objeto de Acceso a Datos.
DB
Base de datos
Sistema operativos de disco de
DOS
comandos en Windows
EXE
Archivo ejecutable en Windows
Tabla de atributos de archivos
FAT
Windows
FONT
Fuente
FTP
Protocolo de transporte de archivos
Archivos grficos de hasta 256
GIF
colores con transparencia de color
HLP
Ayuda
HTML
Documentos de presentacin HTML
Internet Explorer, navegador web de
IE
Windows
INF
Informacin de instalacin
ISO
Archivo de imagen de grabacin
JPG
Archivos grficos alta resolucin
KEY
Entradas de registro
LNK
Acceso directo
MIDI
Archivo de audio de Windows
MP3
Archivo de audio musical
MPG
Archivo de video comprimido
MSG
Mensaje E-mail
MVC
Arquitectura Model View Controller
NTFS
Sistema de archivos de Windows NT
PDF
Adobe Acrobat
Archivos grficos alta resolucin con
PNG
transparencia de color.
TMP
Archivo temporal
TXT
Block de notas / Worpad
WAV
Archivo de audio
Archivos de contenido XML para
XML
configuracin
XSL
Hoja de estilos XSL
ZIP
Archivo comprimido WinZIP

Estndares de Diseo y Programacin .Net Lenguaje C#

Otras abreviaturas
Abreviatur
a
.ascx
.aspx
.cd
.config
.cs
.cshtml
.dll
.master
.mdf
.rdlc
.resx
.rpt
.settings
.sln
.suo
.vb
.vbhtml
.vbs

Descripcin
Control de Servidor ASP.Net
Archivo de cdigo .Net.
Archivo de Diagrama de Clase.
Archivo utilizado para configurar los
valores de la aplicacin.
Archivo de cdigo C#.
Archivo de cdigo C# en html.
Archivo de bibliotecas de enlace
dinmico de Windows
Pgina principal para aplicaciones
Web en WebForm.
Archivo de datos de SQL para datos
locales.
Archivo de Informe.
Archivo utilizado para editar y definir
recursos de aplicaciones.
Archivo de Crystal Report que publica
datos en un formulario de Windows.
Archivo de configuracin del usuario.
Solucin de Visual Studio.
Opciones de usuario de solucin de
Visual Studio.
Archivo de cdigo Visual Basic.
Archivo de Visual Basic en html.
Archivo de comandos que contiene
cdigo VBScript.

.wsf

Archivo que contiene una secuencia


de comandos que se ejecuta como un
programa de Windows.

.xsd

Archivo para crear un esquema XML


con clases DataSet.

5. GLOSARIO DE TERMINOS
La siguiente tabla resume el uso de trminos usadas en este documento:

Estndares de Diseo y Programacin .Net Lenguaje C#

6. ESTANDARES DE PROGRAMACIN
6.1. GENERALIDADES SOBRE EL LENGUAJE C#
C# es un lenguaje orientado a objetos simple, elegante y con seguridad en
el tratamiento de tipos, que permite a los programadores de aplicaciones
empresariales crear una gran variedad de aplicaciones.

C# tambin proporciona la capacidad de generar componentes de sistema


duraderos en virtud de las siguientes caractersticas:

Total compatibilidad entre COM y plataforma para integracin de


cdigo existente.
Gran robustez, gracias a la recoleccin de elementos no utilizados
(liberacin de memoria) y a la seguridad en el tratamiento de tipos.
Seguridad implementada por medio de mecanismos de confianza
intrnsecos del cdigo.
Plena compatibilidad con conceptos de metadatos extensibles.

Adems, es posible interaccionar con otros lenguajes, entre plataformas


distintas, y con datos heredados, en virtud de las siguientes caractersticas:

Plena interoperabilidad por medio de los servicios de COM+ 1.0 y


.NET Framework con un acceso limitado basado en bibliotecas.
Compatibilidad con XML para interaccin con componentes basados
en tecnologa Web.
Capacidad de control de versiones para facilitar la administracin y
la implementacin.

El lenguaje C# presenta las siguientes generalidades:

Lenguaje simple
C# es un lenguaje de programacin simple pero eficaz, diseado
para escribir aplicaciones empresariales.

Programacin Orientada a Objetos


C# es orientado a objetos. C# no permite la inclusin de funciones
ni variables globales que no estn incluidos en una definicin de
tipos, por lo que la orientacin a objetos es ms pura y clara que en
otros lenguajes. C# soporta todas las caractersticas del paradigma
de la programacin orientada a objetos, como son encapsulacin,
herencia y polimorfismo.

Estndares de Diseo y Programacin .Net Lenguaje C#

Compatible
Para facilitar la migracin de programadores de C++ o Java a C#, no
slo se mantiene una sintaxis muy similar a la de los dos anteriores
lenguajes, sino que el CLR tambin ofrece la posibilidad de acceder a
cdigo nativo escrito como funciones sueltas no orientadas a objetos,
tales como las DLLs de la API de Win32.

Modernidad
C# un lenguaje de ltima generacin, implementa elementos que se
ha demostrado a lo largo del tiempo que son muy tiles para el
programador, como tipos decimales o booleanos, un tipo
bsico string as como una instruccin que permita recorrer
colecciones con facilidad. Estos elementos hay que simularlos en
otros lenguajes como C++ o Java.

Recoleccin de basura
El lenguaje incluido en la plataforma .NET tiene a su disposicin el
recolector de basura del CLR. Esto implica que no es necesario incluir
instrucciones de destruccin de objetos en el lenguaje.

Extensin de los operadores bsicos


Para hacer mucho ms fcil la legibilidad de cdigo y poder que los
nuevos tipos de datos que se definan a travs de las estructuras
estn al mismo nivel que los elementos predefinidos en el lenguaje,
a diferencia de Java, C# permite redefinir el significado de la mayora
de los operadores cuando se apliquen a diferentes tipos de objetos.

Seguridad de tipos
C# incluye formas de control de acceso a tipos de datos, lo que
garantiza que no se produzcan errores difciles de detectar como un
acceso a memoria de ningn objeto. Para ello, el lenguaje provee de
una serie de normas de sintaxis, como no realizar conversiones entre
tipos que no sean compatibles, no se pueden usar variables no
inicializadas previamente, y en el acceso a tablas se hace una
comprobacin de rangos para que no se excedan ninguno de los
ndices de la misma.

Instrucciones seguras
Para evitar errores comunes como se producan en otros lenguajes,
se impusieron una serie de restricciones en el uso de instrucciones
de control ms comunes.

Unificacin de tipos

Estndares de Diseo y Programacin .Net Lenguaje C#


En C# todos los tipos derivan de una superclase comn
llamada System. Object, por lo que automticamente heredarn
todos los miembros definidos en esta clase. Es decir, son objetos.
A diferencia de Java, en C# esta caracterstica tambin se aplica
para los tipos bsicos.

Eficiente
En C#, todo el cdigo incluye numerosas restricciones para
garantizar su seguridad, no permitiendo el uso de punteros. Existen
modificadores para saltarse esta restriccin, pudiendo manipular
objetos a travs de punteros. Para ello basta identificar regiones de
cdigo con el identificador unsafe, y podrn usarse en ellas punteros
de forma similar a como se hace en C++.

6.2. CONVENCIONES DE NOMENCLATURA


6.2.1. CONVENCIN GENERAL DE NOMENCLATURA

Las convenciones generales explican la eleccin de los nombres


ms adecuados para los elementos de sus bibliotecas. Estas
instrucciones se aplican a todos los identificadores.
Muchas de las convenciones de nomenclatura pertenecen al uso de
maysculas y minsculas en los identificadores. Es importante
tener en cuenta que Common Language Runtime (CLR) admite los
lenguajes con distincin entre maysculas y minsculas y sin
distincin de ellas.

6.2.2. NOTACIN DE ESPACIOS DE NOMBRES

El nombre elegido para un espacio de nombres debera indicar la


funcionalidad que proporcionan los tipos incluidos en el espacio de
nombres.
Por
ejemplo,
el
espacio
de
nombres
System.Net.Sockets contiene tipos que permiten a los
desarrolladores utilizar sockets para realizar comunicaciones a
travs de las redes.

El formato general para espacio de nombres es como se explica a


continuacin:

Estndares de Diseo y Programacin .Net Lenguaje C#


<Compaa>.(<Producto>|<Tecnologa>)[.<Caracterstica>]
[.<Subespacio de nombres>]

Por ejemplo Microsoft.WindowsMobile.Directx

Prefijar los espacios de nombres con un nombre de compaa evita


que distintas compaas tengan el mismo espacio de nombre.
Utilice un nombre de producto estable, independiente de la versin,
en el segundo nivel de un espacio de nombres.
No utilice las jerarquas de la organizacin como base para los
nombres usados en jerarquas de espacio de nombres.
El espacio de nombre utiliza la grafa Pascal y los componentes se
separan entre puntos.

Ejemplos:
Microsoft.Office.PowerPoint
System.Collections

6.2.2.1. CONFLICTOS DE ESPACIO DE NOMBRES Y NOMBRES


DE TIPOS
Al momento de crear un espacio de nombres tomar en cuenta lo
siguiente:

No utilice nombres de tipo genrico como Element, Node,


Log, Message.

No asigne el mismo nombre a los tipos incluidos en el espacio


de nombres dentro de un nico modelo de la aplicacin.

No proporcione nombres de tipos que entraran en conflicto


con los de cualquier tipo de los espacios de nombres bsicos.

Estndares de Diseo y Programacin .Net Lenguaje C#

No asigne nombres de tipos que estaran en conflicto con


otros tipos incluidos en una misma tecnologa.

6.2.3. NOTACIN DE PROYECTOS Y ARCHIVOS ASOCIADOS

6.2.3.1. ORGANIZACIN DE LOS PROYECTOS

Una solucin .Net se pueden dividir en n capas, las cuales cada


capa representa uno o ms proyectos relacionados entre s. Las
capas principales que pueden conformar una solucin (aplicacin
.Net Framework) son como se muestra en la siguiente imagen:

Capa Negocio (Business Logic): Capa que contendr la lgica


del negocio.
Esta capa de negocio puede contener los proyectos relacionado a
la capa denominada con la siguiente nomenclatura:

Estndares de Diseo y Programacin .Net Lenguaje C#


<NombreProyecto>.Service

Capa Acceso a Datos (DataAccess): Capa que contendr la


lgica de acceso a datos.
Esta capa contiene los proyectos de modelado y repositorio de
datos, con la siguiente nomenclatura:
<NombreProyecto>.Model
<NombreProyecto>.Repository

Capa Utilitarios (Common): Capa que contendr los utilitarios


bsicos de toda aplicacin.
Esta capa contiene los proyectos de trazabilidad de la solucin
(logging) y notificacin, con la siguiente nomenclatura:
<NombreProyecto>.Logging
<NombreProyecto>.Notificator

Capa Presentacin (Presentation): Capa que contendr las


diferentes presentaciones de la aplicacin hacia el usuario.
Esta capa contiene los proyectos de interfaz al usuario, pudiendo
ser aplicaciones web, servicios web y/o reportes, dependiendo el
tipo de presentacin su nomenclatura es como sigue:
<NombreProyecto>.Reporting
<NombreProyecto>.Web
<NombreProyecto>.WebService

Proyecto Web: Aplicacin Web ASP.NET

Estndares de Diseo y Programacin .Net Lenguaje C#


Se presentan los siguientes tipos de modelos:

Web Forms: Combina HTML, script de cliente,


controles de servidor y cdigo de servidor. Cuando
los usuarios solicitan una pgina, es compilado y
ejecutado en el servidor por el framework,
generando el cdigo HTML que el navegador
presenta. Una pgina Web Forms de ASP.NET
presenta informacin al usuario en cualquier
dispositivo de cliente o navegador.

MVC: Se compone del patrn de diseo modelo


vista controlador (MVC).
o

El modelo representa el ncleo de la


aplicacin (por ejemplo una lista de registros
de bases de datos).

La vista muestra los datos (los registros de


base de datos).

El controlador se encarga de la entrada (a


los registros de base de datos).

El modelo MVC tambin proporciona un control total


sobre HTML, CSS y JavaScript.

6.2.3.2. CONVENCIONES PARA EL NOMBRE DE LOS ARCHIVOS


DEL PROYECTO
6.2.3.2.1. Nombres de Ensamblados y Bibliotecas

NOMBRE
DEL
RECURSO

Biblioteca de enlace dinmico (.dll)

DEFINICI
N

En la mayora de los escenarios, un


ensamblado contiene toda una biblioteca

Estndares de Diseo y Programacin .Net Lenguaje C#

reutilizable o parte de ella y est


contenido en una nica biblioteca de
vnculos dinmicos (DLL).

NOTACIN

Los nombres de bibliotecas dll debe


contener la primera letra del
identificador y la primera letra de
las
siguientes
palabras
concatenadas estn en maysculas
(Grafa Pascal)

Se debe crear nombres simples que


describan denominaciones de los
ensamblados separados por puntos,
evitando acrnimos y abreviaturas
(a menos que la abreviatura se use
muy ampliamente).

Considerar
5
palabras
como
mximo para el nombre de las
bibliotecas dll.

No se debe incluir preposiciones en


el nombre de las bibliotecas dll.

Sintaxis:

<Compaia>.<Componente>.dll

Dnde:

<Componente> Contiene una o ms

Estndares de Diseo y Programacin .Net Lenguaje C#

clausulas separadas por puntos

EJEMPLO

Contoso.ControlesWeb.dll

6.2.3.2.2. Nombres de Clases

NOMBRE
DEL
RECURSO

Clase (.cs)

DEFINICI
N

En la mayora de los escenarios, un


ensamblado contiene toda una biblioteca
reutilizable o parte de ella y est
contenido en una nica biblioteca de
vnculos dinmicos (DLL).

En general, los nombres de tipo deberan


ser sintagmas nominales, donde el
nombre es la entidad representada por el
tipo. Por
ejemplo, Button, Stack y File tienen
nombres que identifican la entidad
representada por el tipo. Elija nombres
que identifican la entidad desde el punto
de vista del desarrollador; los nombres
deberan reflejar escenarios de uso.

NOTACIN

Los nombres de bibliotecas dll debe


contener la primera letra del
identificador y la primera letra de
las
siguientes
palabras
concatenadas estn en maysculas
(Grafa Pascal)

Se debe crear nombres simples que

Estndares de Diseo y Programacin .Net Lenguaje C#

describan denominaciones de los


ensamblados separados por puntos,
evitando acrnimos y abreviaturas
(a menos que la abreviatura se use
muy ampliamente).

Considerar
5
palabras
como
mximo para el nombre de las
bibliotecas dll.

No se debe incluir preposiciones en


el nombre de las bibliotecas dll.

Sintaxis:

[Wwww].[Xxxx][Yyyy].dll

Donde:

[Wwww].[Xxxx][Yyyy] -> Palabras


conformadas por
el nombre de la
biblioteca

EJEMPLO

Contoso.ControlesWeb.dll

6.3. CONVENCIONES DE PROGRAMACION

Estndares de Diseo y Programacin .Net Lenguaje C#


6.3.1. NOTACION DE COMPONENTES

6.3.1.1. Convenciones del uso maysculas

EJEMPL
OS
DE
USO

DEFINIC
IN

Identifica
dor

Casin
g

Ejemplo

Namespace
Type
Interface
Method

Pascal
Pascal
Pascal
Pascal

Property

Pascal

Event

Pascal

Enum value

Pascal

Parameter

Camel

namespace System.Security { ... }


public class StreamReader { ... }
public interface IEnumerable { ... }
public class Object {
public virtual string ToString();
}
public class String {
public int Length { get; }
}
public class Process {
public event EventHandler Exited;
}
public enum FileMode {
Append,...
}
public static int ToInt32(string value);

La convencin PascalCasing, se usa para todos los nombres


(miembros pblicos, tipos, espacios de nombres) a excepcin
de nombre de parmetros,
La convencin CamelCasing, solo es usada para el nombre de
parmetros.

NOTACI
N

Case Sensitivy, los lenguajes que corren on CLR (C#).


No requieren soporte de case sensitivy, Pero por efecto
de buenas prcticas debemos asumir el uso de case
sensitive, con el fin de evitar problemas cuanto otros
lenguajes.

Elige nombre de identificadores que sean fciles de leer,


por ejemplo: AlineacionHorizontal en espaol es ms
entendible que HorizontalAlineacion

Los nombres debe favorecer las legibilidad rpida: Por


ejemplo el nombre PuedeHacerScrollHorizontal es mejor
que ScrollX.
No Usar guiones bajos, guiones o cualquier otro carcter
no alfanumrico.

Estndares de Diseo y Programacin .Net Lenguaje C#

No usar notacin Hngara.


Evitar el uso de nombre cuyas palabras sean palabras
reservadas.
No usar abreviaciones o contracciones como parte de
nombre de los identificadores,
por ejemplo:
ObtenerWindow en lugar en ObtenerWin
Utilice nombres semnticamente interesantes en lugar
de palabras claves especficas para los nombres, por
ejemplo: GetLength es mejor que GetInt

6.3.1.2. Nombres de Assemblies y DLLs

EJEMPLOS
DE USO

<Company>.<Component>.dll

DEFINICI
N

Las clases, estructuras e interfaces son elementos que contiene


la definicin de componentes utilizados en el desarrollo de
aplicaciones y permite su reutilizacin por otros elementos.
La definicin de estos elementos se incluye en los archivos de
cdigo de la aplicacin.

NOTACIN

Las siguientes recomendaciones aplican en la nomenclatura de


estos elementos:

Nombrar los elementos usando sustantivos en notacin


Pascal.
Ejemplo: Alumno, AlumnoSecundaria

Evitar el uso de prefijos en el nombre de clases. Por


ejemplo, C.

Utilizar el prefijo I para Interfaces.


Ejemplo: IPersona, IParametroEntrada

Cuando se emplean parmetros de tipo Generic, considerar lo


siguiente:

Estndares de Diseo y Programacin .Net Lenguaje C#

Usar nombres descriptivos.

Emplear la letra T como el tipo de parmetro


Ejemplo: class IAccesoDatos <T>

Si se desea especificar el tipo base asociado, emplear


sustantivos con el prefijo T.
Ejemplo: class IAccesoDatos<TEntidadDatos>

Si debe crear tipos que hereden de tipos primarios de sistema,


considerar los siguientes sufijos:
Tipo Base
System.Attribute
System.Delegate
System.Exception
IDictionary
IEnumerable
ICollection
IList
System.IO.Stream
CodeAccessPermis
sion
IPermission

Sufijo
Atribute
EventHandler
Callback
Exception
Dictionary
Collection

Stream
Permission

Para nombrar enumeraciones o tipos Enum, se debe tomar en


cuenta lo siguiente:

Usar nombres en singular.


No emplear sufijos como Enum o Flag
No usar prefijos en los valores que contiene

6.3.1.3. Nombre de Clases, Estructuras e Interfaces

EJEMPLOS
DE USO

class GestorContenido

Estndares de Diseo y Programacin .Net Lenguaje C#

enum ColorFondo

interface IAccesoDatos

DEFINICI
N

Las clases, estructuras e interfaces son elementos que


contiene la definicin de componentes utilizados en el
desarrollo de aplicaciones y permite su reutilizacin por
otros elementos.
La definicin de estos elementos se incluye en los
archivos de cdigo de la aplicacin.

NOTACIN

Las siguientes recomendaciones


nomenclatura de estos elementos:

aplican

en

la

Nombrar los elementos usando sustantivos en


notacin Pascal.
Ejemplo: Alumno, AlumnoSecundaria

Evitar el uso de prefijos en el nombre de clases.


Por ejemplo, C.

Utilizar el prefijo I para Interfaces.


Ejemplo: IPersona, IParametroEntrada

Cuando se emplean parmetros de tipo Generic,


considerar lo siguiente:

Usar nombres descriptivos.

Emplear la letra T como el tipo de parmetro


Ejemplo: class IAccesoDatos <T>

Si se desea especificar el tipo base asociado,


emplear sustantivos con el prefijo T.
Ejemplo: class IAccesoDatos<TEntidadDatos>

Si debe crear tipos que hereden de tipos primarios de

Estndares de Diseo y Programacin .Net Lenguaje C#

sistema, considerar los siguientes sufijos:


Tipo Base
System.Attribute
System.Delegate
System.Exception
IDictionary
IEnumerable
ICollection
IList
System.IO.Stream
CodeAccessPermis
sion
IPermission

Sufijo
Atribute
EventHandler
Callback
Exception
Dictionary
Collection

Stream
Permission

Para nombrar enumeraciones o tipos Enum, se debe


tomar en cuenta lo siguiente:

Usar nombres en singular.


No emplear sufijos como Enum o Flag
No usar prefijos en los valores que contiene

6.3.1.4. Nombre de Miembros

public int Comparar(...);


EJEMPLOS
DE USO

public string Mensaje;


public delegate void ClickedEventHandler(object
sender, ClickedEventArgs e);

DEFINICI
N

NOTACIN

Las clases, estructuras e interfaces estn compuestos


por Miembros. Los miembros pueden ser mtodos,
propiedades, eventos, constructores y campos.
Las siguientes recomendaciones
nomenclatura de propiedades:

aplican

en

la

Nombrar las propiedades usando sustantivos o

Estndares de Diseo y Programacin .Net Lenguaje C#

adjetivos en notacin Pascal.


Ejemplo: Monto, Activo, Estado

Los nombres de propiedades no deben estar


contenidos en mtodos accesores.
Ejemplo:
public double Monto;
public double GetMonto(); / ObtenerMonto();

Usar nombres en plural con el sufijo Collection


cuando se trate de listas o colecciones de datos.
Emplear prefijos como Es, Esta, Puede o
Tiene, para valores booleanos, cuando lo
amerite.
Ejemplo: EsNulo, PuedeVer, TieneDatos

Para nombrar eventos, considere lo siguiente:

Emplear verbos.

Emplear los tiempos verbales de presente y


pasado para resaltar el antes y despus del
evento.
Ejemplo: CerrandoVentana(), VentanaCerrada()

Usar parmetros sender y e en la definicin


de eventos.

Considerar lo siguiente en los nombres de campos:

Usar notacin Pascal.


No emplear prefijos como g_, s_, p_ para
indicar el tipo o si es propiedad.

6.3.1.5. Nombre de Parmetros

EJEMPLOS
DE USO

public void EnviarCorreo(string correoRemitente, string


correoDestinatario,
string
asunto,
string
cuerpoMensaje)

Estndares de Diseo y Programacin .Net Lenguaje C#

DEFINICI
N

NOTACIN

Los parmetros se emplean para incluir informacin en


la llamada a los mtodos o eventos y pueden ser de
entrada o salida.
Respetar las siguientes consideraciones para nombrar
parmetros:

Emplear nombres descriptivos en notacin


Camel.
Ejemplo: valorInicial, servidorCorreo, esProceso

6.3.1.6. Nombre de Recursos y Archivos de Recursos

EJEMPLOS
DE USO

DEFINICI
N

NOTACIN

public void EnviarCorreo(string correoRemitente, string


correoDestinatario,
string
asunto,
string
cuerpoMensaje)

Los archivos de recurso son empleados cuando se


requiere hacer aplicaciones localizables, es decir, que
modifiquen su presentacin de acuerdo a la regin
donde se invoca.
Respetar las siguientes consideraciones para nombrar
recursos:

Usar notacin Pascal en las llaves.


Ejemplo: EtiquetaTituloInicio, MensajeBienvenida

Brindar descripciones cortas en las llaves.


Usar slo caracteres alfanumricos
Cuando se nombren llaves para mensajes de
excepciones, poner como prefijo el tipo de
excepcin y luego el mensaje.
Ejemplo: ArgumentExceptionMensajeError,
InvalidUserExceptionClaveIncorrecta

Estndares de Diseo y Programacin .Net Lenguaje C#

6.3.2. NIVELES DE ACCESSIBILIDAD

Utilice los modificadores de acceso, public, protected, internal o


private para especificar uno de los siguientes niveles de
accesibilidad declarados para miembros.
Accesibilidad
declarada

Significado

public

Acceso no restringido.

protected

Acceso limitado a la clase contenedora o a


los tipos derivados de esta clase.

internal

Acceso limitado al ensamblado actual.

protected interna
l

Acceso limitado al ensamblado actual o a


los tipos derivados de la clase contenedora.

private

Acceso limitado al tipo contenedor.

Slo se permite un modificador de acceso para un miembro o tipo,


excepto cuando se utiliza la combinacin protectedinternal.
Los modificadores de acceso no se pueden utilizar en espacios de
nombres. Los espacios de nombres no presentan restricciones de
acceso.
Segn el contexto en el que se produce una declaracin de
miembro, slo se permite declarar ciertos tipos de acceso. Si no se
especifica ningn modificador de acceso en una declaracin de
miembro, se utiliza el tipo de acceso predeterminado.
Los tipos de nivel superior, que no estn anidados en otros tipos,
slo pueden tener accesibilidad internal o public. La accesibilidad
predeterminada para estos tipos es internal.

Estndares de Diseo y Programacin .Net Lenguaje C#


Los tipos anidados, que son miembros de otros tipos, pueden tener
un tipo de acceso declarado como el que se indica en la siguiente
tabla.

Miembros
de

Accesibilidad
predeterminada

Accesibilidades
declaradas
permitidas

enum

public

None

class

private

public
protected
internal
private
protected internal

interface

public

None

struct

private

public
internal
private

La accesibilidad de un tipo anidado depende de su dominio de


accesibilidad, el cual se determina mediante la accesibilidad
declarada para el miembro y el dominio de accesibilidad del tipo
inmediato que lo contiene. Sin embargo, el dominio de accesibilidad
de un tipo anidado no puede superar al del tipo contenedor.
6.3.2.1. Restricciones en el uso de los niveles de accesibilidad
Cuando se especifica un tipo en una declaracin, compruebe si el
nivel de accesibilidad del tipo es dependiente del nivel de
accesibilidad de un miembro o de otro tipo. Por ejemplo, la clase
base directa debe ser al menos tan accesible como la clase
derivada. Las siguientes declaraciones producirn un error del
compilador, ya que la clase base BaseClass es menos accesible
que MyClass:
class BaseClass {...}
// Error.
public class MyClass: BaseClass {...}
La siguiente tabla resume las restricciones de uso de los niveles de
accesibilidad declarados.

Estndares de Diseo y Programacin .Net Lenguaje C#

Contexto

Comentarios

Clases

La clase base directa de un tipo de clase debe ser


al menos tan accesible como el propio tipo de
clase.

Interfaces

Las interfaces base explcitas de un tipo de interfaz


deben ser al menos tan accesibles como el propio
tipo de interfaz.

Delegados

El tipo de valor devuelto y los tipos de los


parmetros de un tipo delegado deben ser al
menos tan accesibles como el propio tipo delegado.

Constantes

El tipo de una constante debe ser al menos tan


accesible como la propia constante.

Campos

El tipo de un campo debe ser al menos tan


accesible como el propio campo.

Mtodos

El tipo de valor devuelto y los tipos de parmetros


de un mtodo deben ser al menos tan accesibles
como el propio mtodo.

Propiedades

El tipo de una propiedad debe ser al menos tan


accesible como la misma propiedad.

Eventos

El tipo de un evento debe ser al menos tan


accesible como el propio evento.

Indizadores

El tipo y los tipos de parmetros de un indizador


deben ser al menos tan accesibles como el propio
indizador.

Operadores

El tipo de valor devuelto y los tipos de parmetros


de un operador deben ser al menos tan accesibles
como el propio operador.

Constructore
s

Los tipos de parmetros de un constructor deben


ser al menos tan accesibles como el propio
constructor.

Estndares de Diseo y Programacin .Net Lenguaje C#


6.3.3. MODIFICADORES

Los modificadores se usan para modificar las declaraciones de tipos


y miembros de tipo. En esta seccin se presentan los modificadores
de C#.

Modificador

Propsito

Modificadores de
acceso
public
private
internal
protected

Especifica la accesibilidad declarada de


tipos y miembros de tipo.

abstract

Indica que una clase est diseada slo


para ser una clase base de otras clases.

async

Indica que el mtodo modificado, una


expresin lambda o un mtodo annimo
es asincrnico.

const

Especifica que el valor del campo o la


variable local no se pueden modificar.

Event

Declara un evento.

extern

Indica que el mtodo se implementa


externamente.

new

Oculta
explcitamente
un
heredado de una clase base.

override

Proporciona una nueva implementacin


de un miembro virtual heredado de una
clase base.

parcial

Define clases, structs


parciales a
lo
largo
ensamblado.

readonly

Declara un campo al que solo se pueden


asignar valores como parte de la
declaracin o en un constructor de la

miembro

y mtodos
del
mismo

Estndares de Diseo y Programacin .Net Lenguaje C#

misma clase.
sealed

Especifica que una clase no se puede


heredar.

static

Declara un miembro que pertenece al


propio tipo en lugar de a un objeto
especfico.

unsafe

Declara un contexto no seguro.

virtual

Declara un mtodo o un descriptor de


acceso cuya implementacin se puede
cambiar mediante un miembro de
reemplazo en una clase derivada.

volatile

Indica que un campo se puede modificar


en el programa mediante un elemento
como el sistema operativo, el hardware o
un subproceso que se ejecute en
paralelo.

6.3.4. DECLARACIN DE VARIABLES

Una variable representa un valor numrico o de cadena o un objeto


de una clase. El valor que la variable almacena puede cambiar,
pero el nombre sigue siendo el mismo. Una variable es un tipo de
campo. El cdigo siguiente es un ejemplo sencillo de cmo declarar
una variable de entero, asignarle un valor y, a continuacin,
asignarle un nuevo valor.
// x inicia con valor 1.
int x=1;
// ahora x tiene valor 2.
x=2
En C#, las variables se declaran con un tipo de datos y una etiqueta
concretos. El tipo especfica, entre otras cosas, la cantidad de
memoria exacta que se debe asignar para almacenar el valor
cuando la aplicacin se ejecuta. El lenguaje C# fuerza ciertas reglas
al convertir una variable de un tipo en otro.
Tipo de datos integrados en C#

Estndares de Diseo y Programacin .Net Lenguaje C#

Nombre
corto

Clase
.NET

Tipo

Anc
ho

Intervalo
(bits)

byte

Byte

Entero sin signo

0 a 255

sbyte

SByte

Entero con signo

-128 a 127

int

Int32

Entero con signo

32

2.147.483.64
8
a
2.147.483.64
7

uint

UInt32

Entero sin signo

32

0
a
4294967295

short

Int16

Entero con signo

16

-32.768
32.767

ushort

UInt16

Entero sin signo

16

0 a 65535

long

Int64

Entero con signo

64

9223372036
85477508 a
9223372036
85477507

Estndares de Diseo y Programacin .Net Lenguaje C#

ulong

UInt64

Entero sin signo

64

0
a
1844674407
3709551615

float

Single

Tipo de punto
flotante
de
precisin simple

32

3,402823e38
a
3,402823e38

double

Double

Tipo de punto
flotante
de
precisin doble

64

1,797693134
86232e308 a
1,797693134
86232e308

char

Char

Un
Unicode

carcter

16

Smbolos
Unicode
utilizados en
el texto

bool

Boolean

Tipo
lgico

Boolean

True o false

object

Object

Tipo
todos
tipos

base
de
los otros

string

String

Una secuencia de
caracteres

Estndares de Diseo y Programacin .Net Lenguaje C#

decimal

NOTACIO
N/
SINTAXIS

Decimal

Tipo
preciso
fraccionario
o
integral,
que
puede
representar
nmeros
decimales con 29
dgitos
significativos

128

1.0 10e
28
a
7.9 10e2
8

[NivelAcceso] [modificador] tipo


nombredeVariable

DONDE:
Los puntos entre [ y ] son opcionales. Los items en
negrita se deben reemplazar por palabras clave o por
nombres.
Sintaxis:

EJEMPLO

Sus nombres deben empezar con minscula.


Si est conformado por varias palabras, entonces a
partir de la segunda palabra se usar carcter en
mayscula. Adems, su nombre debe ser
representativo a su contenido.
Se deben crear nombres simples y sobre todo
descriptivos. Tratando de usar palabras completas,
evitando acrnimos y abreviaturas (a menos que la
abreviatura se use muy ampliamente.
Considerar 5 palabras como mximo para los
nombres.

private static double importe;


private int contadorIngresos;

Estndares de Diseo y Programacin .Net Lenguaje C#

6.3.5. DECLARACIN DE CONSTANTES

Las constantes son campos cuyos valores se establecen en tiempo


de compilacin y no se pueden cambiar. Utilice constantes a fin de
proporcionar nombres significativos en lugar de literales numricos
("nmeros mgicos") para valores especiales.
Para definir valores constantes de tipos enteros (int, byte, etc.)
utilice un tipo enumerado.
Un mtodo para definir constantes no integrales consiste en
agruparlas en una clase esttica nica denominada Constants. Esto
requerir que todas las referencias a las constantes vayan
precedidas del nombre de clase, como se muestra en el ejemplo
siguiente.
static class Constants
{
public const double PI = 3.14159;
public const int SPEED_LIGHT = 300000;
}
class Program
{
static void Main()
{
double radius = 5.3;
double area = Constants.PI * (radius * radius);
int secsFromSun = 149476000 / Constants. SPEED_LIGHT;
}
}
El uso del calificador de nombres de clase ayuda a garantizar que
los usuarios de la constante entiendan que es una constante y no
se puede modificar.
Por convencin, los nombres de los valores constantes se escriben
completamente en maysculas y pueden formarse de varias
palabras separadas por subguin (_).
Nota: No declarar constantes que no sern usadas.

6.3.6. DECLARACIN DE COLECCIONES

En muchas aplicaciones se desea poder crear y administrar grupos


de objetos relacionados. Existen dos formas de agrupar objetos:

Estndares de Diseo y Programacin .Net Lenguaje C#


mediante la creacin de matrices de objetos y mediante la creacin
de colecciones de objetos.

Matrices
Las matrices son muy tiles para crear y trabajar con un nmero
fijo de objetos fuertemente tipados.

NOTACIO
N/
SINTAXIS
DONDE:

Tipo [ ] nombreMatriz

Sus nombres deben empezar con minscula.


Si est conformado por varias palabras, entonces a
partir de la segunda palabra se usar carcter en
mayscula. Adems, su nombre debe ser
representativo a su contenido.
Se deben crear nombres simples, sobre todo
descriptivos y en plural. Tratando de usar palabras
completas, evitando acrnimos y abreviaturas (a
menos
que
la abreviatura
se
use
muy
ampliamente.
Considerar 5 palabras como mximo para los
nombres.

int[ ] cincoEnteros = new int[5];


EJEMPLO

int[ ] numerosImpares
{1,3,5,7,9};

new

int[

char[ ] vocales ={a,e,I,o,u};

Colecciones
Las colecciones proporcionan un mtodo ms flexible para
trabajar con grupos de objetos. A diferencia de las matrices, el
grupo de objetos con el que trabaja puede aumentar y reducirse
dinmicamente a medida que cambian las necesidades de la
aplicacin. Para algunas colecciones, puede asignar una clave a
cualquier objeto que incluya en la coleccin para que pueda
recuperar rpidamente el objeto con la clave asignada.

Estndares de Diseo y Programacin .Net Lenguaje C#


Una coleccin es una clase, de modo que antes de poder agregar
elementos a una nueva coleccin, debe declararla.
Si su coleccin se limita a elementos de solo un tipo de datos,
puede utilizar una de las clases en el espacio de
nombresSystem.Collections.Generic. Una
coleccin
genrica
cumple la seguridad de tipos para que ningn otro tipo de datos
se pueda agregar a ella. Cuando recupera un elemento de una
coleccin genrica, no tiene que determinar su tipo de datos ni
convertirlo.

6.3.6.1. Clases de Colecciones


Varias colecciones comunes son proporcionadas por .NET
Framework. Cada tipo de coleccin est diseado para un propsito
concreto.
Los siguientes grupos de clases de coleccin estn descritos en
esta seccin:

Clases System.Collections.Generic
Puede crear una coleccin genrica utilizando una de las
clases
en
el
espacio
de
nombres
System.Collections.Generic. Una coleccin genrica es til
cuando todos los elementos de la coleccin tienen el mismo
tipo de datos. Una coleccin genrica cumple el tipado fuerte
al permitir agregar slo el tipo de datos deseado.
A continuacin se muestran algunas de las clases utilizadas
con
frecuencia
del
espacio
de
nombres
System.Collections.Generic:
Dictionary
CLASE

DEFINICIN

Representa una coleccin de pares de clave


y valor que se organizan por claves.

NOTACIN

Dictionary<TKey, TValue>

Estndares de Diseo y Programacin .Net Lenguaje C#

Dnde:
TKey: Tipo de las claves del diccionario.
TValue: Tipo
diccionario.

EJEMPLO

de

los

valores

del

Dictionary<int, StudentName> students =


new Dictionary<int, StudentName>()
{
{ 1, new StudentName
{FirstName="Sachin",
LastName="Karnik", ID=211}},
{ 2, new StudentName
{FirstName="Dina",
LastName="Salimzianova",
ID=317}},
{ 3, new StudentName
{FirstName="Andy",
LastName="Ruth", ID=198}}
};

List
CLASE

DEFINICIN

Representa una lista de objetos a los que se


puede obtener acceso mediante un
ndice. Proporciona mtodos para buscar,
ordenar y modificar listas.

NOTACIN

List<T>

Dnde:
T: Tipo de elemento de lista.

Estndares de Diseo y Programacin .Net Lenguaje C#

EJEMPLO

List< StudentName > students = new


List< StudentName>();
students.Add(new StudentName()
{FirstName="Sachin",
LastName="Karnik"});
students.Add(new StudentName()
{FirstName="Dina",
LastName=" Salimzi"});
students.Add(new StudentName()
{FirstName=" Andy ",
LastName=" Ruth "});

Queue
CLASE

DEFINICIN

Representa una coleccin de objetos


primero en entrar, primero en salir (FIFO).

NOTACIN

Queue<T>

Dnde:
T: Especifica el tipo de elementos en la
cola.

EJEMPLO

Queue<string> numbers = new


Queue<string>();
numbers.Enqueue("one");
numbers.Enqueue("two");
numbers.Enqueue("three");
numbers.Enqueue("four");
numbers.Enqueue("five");

Estndares de Diseo y Programacin .Net Lenguaje C#

SortedList
CLASE

DEFINICIN

Representa una coleccin de pares de clave


y valor que se ordenan por claves segn la
implementacin de la interfaz IComparer
asociada.

NOTACIN

SortedList<TKey, TValue>

Dnde:
TKey: Tipo de las claves de la coleccin.
TValue: Tipo
coleccin.

EJEMPLO

de

los

valores

de

la

SortedList<string, string> openWith =


new SortedList<string, string>();
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");

Stack
CLASE

DEFINICIN

Representa una coleccin de objetos con el


orden ltimo en entrar, primero en salir
(LIFO).

NOTACIN

Stack<T>

Estndares de Diseo y Programacin .Net Lenguaje C#

Dnde:
T: Especifica el tipo de los elementos de
la pila.

EJEMPLO

Stack<string> numbers = new


Stack<string>();
numbers.Push("one");
numbers.Push("two");
numbers.Push("three");
numbers.Push("four");
numbers.Push("five");

Clases System.Collections.Concurrent
En .NET Framework 4, las colecciones en el espacio de
nombres de System.Collections.Concurrent proporcionan
operaciones eficaces y seguras para subprocesos con el fin
de obtener acceso a los elementos de coleccin desde varios
subprocesos.
Las
clases
del
espacio
de
nombres System.Collections.Concurrent deben utilizarse
en lugar de sus equivalentes en los espacios de nombres
System.Collections.Generic y System.Collections cuand
o varios subprocesos tienen acceso a la coleccin de manera
simultnea.
Algunas clases incluidas en el espacio
System.Collections.Concurrent son:
o
o
o
o

de

nombres

BlockingCollection
ConcurrentDictionary
ConcurrentQueue
ConcurrentStack

Clases System.Collections
Las clases del espacio de nombres System.Collections no
almacenan los elementos como objetos de un tipo especfico,
sino como objetos de tipo Object.

Estndares de Diseo y Programacin .Net Lenguaje C#


Siempre que sea posible, se deberan utilizar las colecciones
genricas
del
espacio
de
nombres System.Collections.Generic o del espacio de
nombres System.Collections.Concurrent en lugar de los
tipos
heredados
en
el
espacio
de
nombres System.Collections.
A continuacin se muestran algunas de las clases utilizadas
con frecuencia del espacio de nombres System.Collections:
ArrayList
CLASE

DEFINICIN

Representa una matriz de objetos cuyo


tamao aumenta dinmicamente segn sea
necesario.

NOTACIN

ArrayList()

EJEMPLO

ArrayList myAL = new ArrayList();


myAL.Add("Hello");
myAL.Add("World");
myAL.Add("!");

Hashtable
CLASE

DEFINICIN

Representa una coleccin de pares de clave


y valor que se organizan por cdigo hash de
la clave.

NOTACIN

Hashtable()

EJEMPLO

Hashtable openWith = new Hashtable();


openWith.Add("txt", "notepad.exe");

Estndares de Diseo y Programacin .Net Lenguaje C#

openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");

Queue
CLASE

DEFINICIN

Representa una coleccin de objetos


primero en entrar, primero en salir (FIFO).

NOTACIN

Queue<T>

Dnde:
T: Especifica el tipo de elementos en la
cola.

EJEMPLO

Queue<string> numbers = new


Queue<string>();
numbers.Enqueue("one");
numbers.Enqueue("two");
numbers.Enqueue("three");
numbers.Enqueue("four");
numbers.Enqueue("five");

Stack
CLASE

DEFINICIN

Representa una coleccin de objetos con el


orden ltimo en entrar, primero en salir
(LIFO).

Estndares de Diseo y Programacin .Net Lenguaje C#

NOTACIN

Stack<T>

Dnde:
T: Especifica el tipo de los elementos de
la pila.

EJEMPLO

Stack<string> numbers = new


Stack<string>();
numbers.Push("one");
numbers.Push("two");
numbers.Push("three");
numbers.Push("four");
numbers.Push("five");

6.3.7. NOTACIN DE SENTENCIAS

6.3.7.1. Sentencias Simples


Cada lnea debera contener una sola expresin.
Ejemplo:
addLista ++;
addLista --;

// Correcto
// Correcto

6.3.7.2. Sentencias de Retorno


Una expresin de retorno con un valor, no debera usar parntesis a
menos que ayuden a visualizar mejor lo que se devuelve.
Ejemplo:
return;
return myDisk.size();
return (size ? size : defaultSize);
6.3.7.3. Sentencias IF, IF-ELSE, IF ELSE-IF ELSE
Dichas expresiones deberan tener el siguiente formato:
FORMA 1

Estndares de Diseo y Programacin .Net Lenguaje C#


if (condition) {
statements;
}
FORMA 2
if (condition) {
statements;
} else {
statements;
}
FORMA 3
if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}
6.3.7.4. Sentencias FOR
Una expresin for debe de tener necesariamente la siguiente
forma:
for (initialization; condition; update) {
statements;
}
6.3.7.5. Sentencias WHILE
Una expresin while debera tener el siguiente formato:
while (condition) {
statements;
}
6.3.7.6. Sentencias DO-WHILE
Un do-while expresin debera tener le siguiente formato:
do {
statements;

Estndares de Diseo y Programacin .Net Lenguaje C#


} while (condition);
6.3.7.7. Sentencias SWITCH
Una Expresin switch debe de tener el siguiente formato:
switch (condicion) {
case ABC:
statements;
break;
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
6.3.7.8. Consultas LINQ
Utilice nombres descriptivos para las variables de consulta.
En el ejemplo siguiente, se utiliza seattleCustomers para
clientes que se encuentran en Seattle.

los

var seattleCustomers = from cust in customers


where cust.City == "Seattle"
select cust.Name;
Utilice alias para asegurarse de que los nombres de propiedad de
tipos annimos se escriben correctamente con mayscula o
minscula, usando para ello la grafa Pascal.
var localDistributors = from customer in customers
join distributor in distributors
on customer.City equals
distributor.City
select new { Customer =
customer,

Estndares de Diseo y Programacin .Net Lenguaje C#


Distributor =
distributor };
Cambie el nombre de las propiedades cuando puedan ser ambiguos
en el resultado.
Por ejemplo, si la consulta devuelve un nombre de cliente y un
identificador
de
distribuidor,
en
lugar
de
dejarlos
como Name e ID en el resultado, cambie su nombre para aclarar
que Name es el nombre de un cliente e ID es el identificador de un
distribuidor.
var localDistributors2 = from cust in customers
join dist in distributors
on cust.City equals
dist.City
select new { CustomerName =
cust.Name,
DistributorID =
dist.ID };
Utilice tipos implcitos en la declaracin de variables de consulta y
variables de intervalo.
var seattleCustomers = from cust in customers
where cust.City == "Seattle"
select cust.Name;
Alinee las clusulas de consulta bajo la clusula from, como se
muestra en los ejemplos anteriores.
Utilice clusulas where antes de otras clusulas de consulta para
asegurarse de que las clusulas de consulta posteriores operan en
un conjunto de datos reducido y filtrado.
var seattleCustomers = from cust in customers
where cust.City == "Seattle"
orderby cust.Name
select cust;
Utilice varias clusulas from en lugar de una clusula join para
acceder a colecciones internas.
Por ejemplo, una coleccin de objetosStudent podra contener cada
uno un conjunto de resultados de exmenes.Cuando se ejecuta la

Estndares de Diseo y Programacin .Net Lenguaje C#


siguiente consulta, devuelve cada resultado superior a 90, adems
del apellido del alumno que recibi la puntuacin.
var scoreQuery = from student in students
from score in student.Scores
where score > 90
select new { Last = student.LastName,
score };
6.3.7.9. Manejo de Errores
Utilice una instruccin try-catch en la mayora de casos de control
de errores o excepciones.
try {
statements;
} catch (ClaseExcepcion excepcion) {
statements;
} finally {
statements;
}
6.4. CONVENCIONES DE FORMATO DE CDIGO FUENTE
6.4.1. COMENTARIOS DE CODIGO FUENTE

DEFINICIN DE COMENTARIOS
Los comentarios explican la razn de la existencia de cdigo de
programacin y son muy importantes para el mantenimiento y
documentacin.
La convencin de los comentarios es como siguen:

Coloque el comentario en una lnea independiente, no al final


de una lnea de cdigo.

Comience el texto del comentario con una letra mayscula.

Finalice el texto del comentario con un punto.

Estndares de Diseo y Programacin .Net Lenguaje C#

Inserte un espacio entre el delimitador de comentario (//) y el


texto del comentario, como se muestra en el ejemplo
siguiente.

// La siguiente declaracin crea una consulta. No se ejecuta


// la consulta.

No crear bloques con formato de asteriscos alrededor de


comentarios (/**/).

COMENTARIOS DE DOCUMENTACIN XML


C# proporciona un mecanismo para que los programadores puedan
documentar el cdigo mediante XML. En los archivos de cdigo
fuente, las lneas que empiezan con /// y que preceden a un tipo
definido por el usuario (tal como una clase, un delegado o una
interfaz), a un miembro (como un campo, evento, propiedad o
mtodo) o a una declaracin de espacio de nombres se pueden
procesar como comentarios e incluir en un archivo.

ETIQUETAS
RECOMENDADAS
DOCUMENTACIN

PARA

COMENTARIOS

DE

El compilador de C# procesa los comentarios de documentacin del


cdigo y genera con ellos un archivo XML. El procesamiento del
archivo XML para crear documentacin es un detalle que se debe
implementar localmente.
Las etiquetas se procesan sobre construcciones de cdigo, tales
como tipos y miembros de tipos.

Nota: Las etiquetas no se procesan sobre espacios de nombres.

Estndares de Diseo y Programacin .Net Lenguaje C#

El compilador procesar cualquier etiqueta vlida en XML. Las


siguientes etiquetas proporcionan la funcionalidad habitual en la
documentacin de usuario:

<c>
ETIQUETA

DEFINICIN

Proporciona un modo de indicar que el texto de una


descripcin
se
debera
marcar
como
cdigo. Utilice <code> para marcar varias lneas como
cdigo.

<c>text</c>
NOTACIN

Parmetros
text
Texto que se desea marcar como cdigo.

EJEMPLO

/// text for class TestClass


public class TestClass
{
/// <summary><c>DoWork</c> is a method
in the <c>TestClass</c> class.
/// </summary>
public static void DoWork(int Int1)
{
}
/// text for Main
static void Main()
{
}
}

Estndares de Diseo y Programacin .Net Lenguaje C#

<code>
ETIQUETA

DEFINICIN

Proporciona un modo de marcar varias lneas


como cdigo. Utilice <c> para indicar que el texto
de una descripcin se debera marcar como
cdigo.
<code>content</code>

NOTACIN

Parmetros
content
Texto que se desea marcar como cdigo.

EJEMPLO

/// <summary>
/// The GetZero method.
/// </summary>
/// <example>
/// This sample shows how to call the <see
cref="GetZero"/> method.
/// <code>
/// class TestClass
/// {
///
static int Main()
///
{
///
return GetZero();
///
}
/// }
/// </code>
/// </example>
public static int GetZero()
{
return 0;
}

<example>
ETIQUETA

Estndares de Diseo y Programacin .Net Lenguaje C#

DEFINICIN

Permite especificar un ejemplo de cmo utilizar un


mtodo u otro miembro de una biblioteca.
Generalmente, esto supone utilizar la etiqueta
<code>.
<example>description</example>

NOTACIN

Parmetros
description
Descripcin del ejemplo de cdigo.

EJEMPLO

/// <summary>
/// The GetZero method.
/// </summary>
/// <example>
/// This sample shows how to call the <see
cref="GetZero"/> method.
/// <code>
/// class TestClass
/// {
///
static int Main()
///
{
///
return GetZero();
///
}
/// }
/// </code>
/// </example>
public static int GetZero()
{
return 0;
}

<exception>
ETIQUETA

DEFINICIN

Permite especificar las excepciones que se


pueden producir. Esta etiqueta puede aplicarse a

Estndares de Diseo y Programacin .Net Lenguaje C#

las definiciones de mtodos, propiedades, eventos


e indizadores

NOTACIN

<exception
cref="member">description</exception>
Parmetros
cref = "member"
Referencia a una excepcin disponible
desde el entorno de compilacin actual. El
compilador comprueba que la excepcin
proporcionada existe y traduce member al
nombre de elemento cannico en el
resultado
XML. member debe
aparecer
entre comillas dobles ("").

description
Descripcin de la excepcin.

EJEMPLO

/// Comment for class


public class EClass : System.Exception
{
// class definition...
}
/// Comment for class
class TestClass
{
/// <exception
cref="System.Exception">Thrown
when...</exception>
public void DoSomething()
{
try
{
}
catch (EClass)
{

Estndares de Diseo y Programacin .Net Lenguaje C#

}
}
}

<include>
ETIQUETA

DEFINICIN

NOTACIN

Permite hacer referencia a comentarios colocados


en otro archivo que describen los tipos y
miembros del cdigo fuente. sta es una
alternativa al mtodo habitual de colocar los
comentarios de la documentacin directamente
en el archivo de cdigo fuente. Colocando la
documentacin en un archivo independiente,
puede aplicar el control de cdigo fuente a la
documentacin independientemente del cdigo
fuente. Una persona puede tener el archivo de
cdigo fuente desprotegido y alguien ms puede
tener el archivo de documentacin desprotegido.
<include file='filename'
path='tagpath[@name="id"]' />
Parmetros
filename
El nombre del archivo XML que contiene la
documentacin. El nombre de archivo se
puede completar con una ruta de
acceso. Agreguefilename entre
comillas
simples (' ').
tagpath
Ruta
de
acceso
de
las
etiquetas
de filename que
conduce
a
la
etiqueta name. Ponga la ruta de acceso
entre comillas simples (' ').
name

Estndares de Diseo y Programacin .Net Lenguaje C#

Especificador de nombre en la etiqueta que


precede a los comentarios; name poseer
un id.
id
Identificador para la etiqueta que precede a
los comentarios. Ponga el id. entre comillas
dobles (" ").

EJEMPLO

/// <include file='xml_include_tag.doc'


path='MyDocs/MyMembers[@name="test"]/*' />
class Test
{
static void Main()
{
}
}
/// <include file='xml_include_tag.doc'
path='MyDocs/MyMembers[@name="test2"]/*' />
class Test2
{
public void Test()
{
}
}

<list>
ETIQUETA

DEFINICIN

Se utiliza para definir la fila de encabezado de una


tabla o de una lista de definiciones. Cuando se
define una tabla, slo es necesario suministrar
una entrada para un trmino en el encabezado.
Cada elemento de la lista se especifica con un
bloque <item>. Cuando se crea una lista de

Estndares de Diseo y Programacin .Net Lenguaje C#

definiciones, se debern especificar tanto term


como description. Sin embargo, para una tabla,
lista con vietas o lista numerada, slo es
necesario
suministrar
una
entrada
para
description.
Una lista o una tabla pueden tener tantos bloques
<item> como sean necesarios.

NOTACIN

<list type="bullet" | "number" | "table">


<listheader>
<term>term</term>
<description>description</description>
</listheader>
<item>
<term>term</term>
<description>description</description>
</item>
</list>
Parmetros
term
Trmino que se define en description.
description
Elemento de una lista numerada o con
vietas, o definicin de un term.

EJEMPLO

/// text for class TestClass


public class TestClass
{
/// <summary>Here is an example of a bulleted
list:
/// <list type="bullet">
/// <item>
/// <description>Item 1.</description>
/// </item>
/// <item>
/// <description>Item 2.</description>
/// </item>

Estndares de Diseo y Programacin .Net Lenguaje C#

/// </list>
/// </summary>
static void Main()
{
}
}

<para>
ETIQUETA

DEFINICIN

se utiliza dentro de otra etiqueta, tal como


<summary>, <remarks> o <returns>, y permite
dar una estructura al texto.
<para>content</para>

NOTACIN

EJEMPLO

Parmetros
content
Texto del prrafo.

/// <summary>DoWork is a method in the


TestClass class.
/// <para>Here's how you could make a second
paragraph in a description. <see
cref="System.Console.WriteLine(System.String)"/
> for information about output
statements.</para>
/// <seealso cref="TestClass.Main"/>
/// </summary>

<param>
ETIQUETA

DEFINICIN

Se utiliza dentro de otra etiqueta, tal como


<summary>, <remarks> o <returns>, y permite
dar una estructura al texto.

Estndares de Diseo y Programacin .Net Lenguaje C#

<param name="name">description</param>
NOTACIN

EJEMPLO

Parmetros
name
Nombre de un parmetro de mtodo. Ponga
el nombre entre comillas dobles (" ").
description
Descripcin del parmetro.

/// text for class TestClass


public class TestClass
{
// Single parameter.
/// <param name="Int1">Used to indicate
status.</param>
public static void DoWork(int Int1)
{
}
// Multiple parameters.
/// <param name="Int1">Used to indicate
status.</param>
/// <param name="Float1">Used to specify
context.</param>
public static void DoWork(int Int1, float Float1)
{
}
/// text for Main
static void Main()
{
}
}

<paramref>
ETIQUETA

DEFINICIN

Proporciona una forma de indicar que una palabra


en los comentarios del cdigo, por ejemplo en un
bloque
<summary>
o
<remarks>,
hace
referencia a un parmetro. El archivo XML se

Estndares de Diseo y Programacin .Net Lenguaje C#

puede procesar para dar formato a esta palabra


de alguna manera distinta, como con una fuente
en negrita o en cursiva.
<paramref name="name"/>
NOTACIN

EJEMPLO

Parmetros
name
Nombre del parmetro al que hay que
hacer referencia. Ponga el nombre entre
comillas dobles (" ").

/// text for class TestClass


public class TestClass
{
/// <summary>DoWork is a method in the
TestClass class.
/// The <paramref name="Int1"/> parameter
takes a number.
/// </summary>
public static void DoWork(int Int1)
{
}
/// text for Main
static void Main()
{
}
}

<permission>
ETIQUETA

DEFINICIN

NOTACIN

Permite documentar el acceso de un miembro. La


clase PermissionSet permite especificar el acceso
a un miembro.
<permission
cref="member">description</permission>
Parmetros

Estndares de Diseo y Programacin .Net Lenguaje C#

cref = "member"
Referencia a un miembro o campo al cual
se puede llamar desde el entorno de
compilacin
actual. El
compilador
comprueba si el elemento de cdigo dado
existe y convierte member al nombre de
elemento
cannico
en
el
resultado
XML. member debe aparecer entre comillas
dobles (" ").

description
Descripcin del acceso al miembro.

EJEMPLO

class TestClass
{
/// <permission
cref="System.Security.PermissionSet">Everyone
can access this method.</permission>
public static void Test()
{
}
static void Main()
{
}
}

<remarks>
ETIQUETA

DEFINICIN

Se utiliza para agregar informacin sobre un tipo,


de
modo
que
completa
la
informacin
especificada con <summary>.
<remarks>description</remarks>

NOTACIN

Estndares de Diseo y Programacin .Net Lenguaje C#

Parmetros
Description
Descripcin del miembro.

EJEMPLO

/// <summary>
/// You may have some primary information about
this class.
/// </summary>
/// <remarks>
/// You may have some additional information
about this class.
/// </remarks>
public class TestClass
{
/// text for Main
static void Main()
{
}
}

<returns>
ETIQUETA

DEFINICIN

Se debe utilizar en el comentario de una


declaracin de mtodo para describir el valor
devuelto.
<returns>description</returns>

NOTACIN

EJEMPLO

Parmetros
description
Descripcin del valor devuelto.
/// text for class TestClass
public class TestClass
{
/// <returns>Returns zero.</returns>
public static int GetZero()
{
return 0;
}

Estndares de Diseo y Programacin .Net Lenguaje C#

/// text for Main


static void Main()
{
}
}

<see>
ETIQUETA

DEFINICIN

Permite especificar un vnculo desde dentro del


texto. Use <seealso> para indicar que el texto
debe colocarse en una seccin Vea tambin. Use
el atributo cref para crear hipervnculos internos a
las pginas de documentacin de los elementos
de cdigo.
<see cref="member"/>

NOTACIN

EJEMPLO

Parmetros
cref = "member"
Referencia a un miembro o campo al cual
se puede llamar desde el entorno de
compilacin actual. El compilador
comprueba si el elemento de cdigo dado
existe y pasa member al nombre de
elemento en el resultado
XML.Agregue member entre comillas dobles
(" ").
/// text for class TestClass
public class TestClass
{
/// <summary>DoWork is a method in the
TestClass class.
/// <para>Here's how you could make a second
paragraph in a description. <see
cref="System.Console.WriteLine(System.String)"/
> for information about output
statements.</para>
/// <seealso cref="TestClass.Main"/>
/// </summary>

Estndares de Diseo y Programacin .Net Lenguaje C#

public static void DoWork(int Int1)


{
}
/// text for Main
static void Main()
{
}
}

<seealso>
ETIQUETA

DEFINICIN

Permite especificar el texto que se desea que


aparezca en una seccin Vea tambin. Utilice
<see> para especificar un vnculo desde dentro
del texto.
<seealso cref="member"/>

NOTACIN

EJEMPLO

Parmetros
cref = "member"
Referencia a un miembro o campo al cual
se puede llamar desde el entorno de
compilacin actual. El compilador
comprueba si el elemento de cdigo dado
existe y pasa member al nombre de
elemento en el resultado
XML.member debe aparecer entre comillas
dobles (" ").
/// <summary>DoWork is a method in the
TestClass class.
/// <para>Here's how you could make a second
paragraph in a description. <see
cref="System.Console.WriteLine(System.String)"/
> for information about output
statements.</para>
/// <seealso cref="TestClass.Main"/>
/// </summary>
public static void DoWork(int Int1)
{

Estndares de Diseo y Programacin .Net Lenguaje C#

<summary>
ETIQUETA

DEFINICIN

Se utiliza para describir un tipo o un miembro de


tipo.
Utilice
<remarks>
para
suministrar
informacin adicional a una descripcin de tipo.
Use el atributo cref para que herramientas de
documentacin como Sandcastle puedan crear
hipervnculos
internos
a
las
pginas
de
documentacin de los elementos de cdigo.
El texto de la etiqueta <summary> es la nica
fuente de informacin sobre el tipo en IntelliSense
y tambin se muestra en el Object Browser
Window.
<summary>description</summary>

NOTACIN

EJEMPLO

Parmetros
description
Resumen del objeto.
/// text for class TestClass
public class TestClass
{
/// <summary>DoWork is a method in the
TestClass class.
/// <para>Here's how you could make a second
paragraph in a description. <see
cref="System.Console.WriteLine(System.String)"/
> for information about output
statements.</para>
/// <seealso cref="TestClass.Main"/>
/// </summary>
public static void DoWork(int Int1)
{
}
/// text for Main
static void Main()
{

Estndares de Diseo y Programacin .Net Lenguaje C#

}
}

<value>
ETIQUETA

DEFINICIN

Permite describir el valor que representa una


propiedad. Tenga en cuenta que al agregar una
propiedad a travs de un asistente para cdigo en
el entorno de desarrollo de Visual Studio .NET, se
agregar una etiqueta <summary> para la nueva
propiedad. A continuacin, se debe agregar
manualmente una etiqueta <value> que describa
el valor que representa la propiedad.
<value>property-description</value>

NOTACIN

EJEMPLO

Parmetros
property-description
Descripcin de la propiedad.
/// text for class Employee
public class Employee
{
private string _name;
/// <summary>The Name property represents
the employee's name.</summary>
/// <value>The Name property gets/sets the
value of the string field, _name.</value>
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}

Estndares de Diseo y Programacin .Net Lenguaje C#

}
/// text for class MainClass
public class MainClass
{
/// text for Main
static void Main()
{
}
}

6.4.2. TAMAO DE LNEA

Las lneas de cdigo deben tener una longitud mxima de 80


caracteres, dado que ocasiona problemas de ajuste en las
impresiones de cdigo.

6.4.3. AJUSTE DE LNEA

Cuando la expresin no encaja en una lnea, se debe quebrar de


acuerdo a lo siguiente:

Quebrarla despus de una coma.

Quebrarla antes de un operador.

Preferibles son los quiebres en el nivel ms alto a los


quiebres en el nivel ms bajo.

Alinear la nueva lnea con el comienzo de la expresin sobre


el mismo nivel en la lnea previa.

Estndares de Diseo y Programacin .Net Lenguaje C#

Si sobre las reglas principales se ocasiona confusin de


cdigo, se debe identar 8 espacios, en lugar de lo anterior
expuesto.

Algunos ejemplos de quiebre en la llamada de mtodos:

cargarMetodo(datos,listas, correo,
usuario, mensaje);
variable = cargarMetodo(datos,
actualizarMetodo(listas,
correo));

Lo siguiente son dos ejemplos de quiebre de lnea en una expresin


aritmtica. El primero es recomendable cuando se maneje cambio
de lneas.

// RECOMENDADO
totalCalculo
=
primerCalculo
*
(segundoCalculo
tercerCalculo cuartoCalculo) + 4 * quintoCalculo;

// EVITAR
totalCalculo
=
primerCalculo
*
(segundoCalculo
tercerCalculo
- cuartoCalculo) + 4 * quintoCalculo;

Los siguientes son dos ejemplos de identacin en la declaracin de


mtodos. El primero es un caso convencional. El segundo cambiar
la segunda y tercera lnea usando la identacin convencional.

//IDENTACIN CONVENCIONAL
actualizarAtencion(int cantidad,
Object atenciones,
String personas,
Object promedio){
..........
}

Estndares de Diseo y Programacin .Net Lenguaje C#


//INDENTACIN A 8 ESPACIOS, EVITAR MUCHOS NIVELES DE
//PROFUNDIDAD.

private static synchronized actualizarAtencion (


int cantidad,
Object atenciones,
String personas,
Object promedio) {
...................
}

En cambios de lnea para una sentencia "if" se debe usar regla de


los 8 espacios, en vez de los convencionales 4 espacios, ya que
hace difcil la vista del cuerpo del cdigo. Por ejemplo:

//USAR ESTA INDENTACIN.


if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
//O USAR ESTA.
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
Aqu existen tres maneras de dar formato a una expresin ternaria:
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta:
gamma;
alpha = (aLongBooleanExpression)?
beta:
gamma;

6.5. PRCTICAS DE DESARROLLO

S-ar putea să vă placă și