Vous êtes sur la page 1sur 12

Octubre 15, 2007

Estandares de codificacion en C#
Posted by gweisz under Coding Tips, Tutorial references
1 Comment

Les dejo una referencia a un texto simple y explicativo sobre cuales deberian ser las pautas generales a tener en
cuenta a la hora de crear proyectos en C#.
El seguir estas pautas nos permite generar un codigo claro y facil de entender por otros programadores.
El link: http://debian.fmi.uni-sofia.bg/~iliyan/csharp_coding/

Octubre 10, 2007

Tutoriales Varios
Posted by gweisz under Tutorial references
[2] Comments

Si queres conocer sobre MDI te recomiendo este tutorial:


- http://www.csharphelp.com/archives3/archive572.html
Si queres conocer sobre como implementar singletones en C# te recomiendo este otro:
- http://www.yoda.arachsys.com/csharp/singleton.html

Octubre 8, 2007

Obteniendo la hora y fecha actual en C#


Posted by gweisz under Quick HowTo
No Comments

En C# para obtener la hora y fecha actual disponemos de la clase System.DateTime, veamos como funciona con
un ejemplo:
using System;
class myApp
{
public static void Main()
{
DateTime CurrTime = DateTime.Now;
Console.WriteLine(DateTime display listing specifier and result:\n);

Console.WriteLine(d = {0:d}, CurrTime ); // Short date mm/dd/yyyy


Console.WriteLine(D = {0:D}, CurrTime ); // Long date day, month dd, yyyy
Console.WriteLine(f = {0:f}, CurrTime ); // Full date/short time day, month dd, yyyy hh:mm
Console.WriteLine(F = {0:F}, CurrTime ); // Full date/full time day, month dd, yyyy HH:mm:ss AM/PM
Console.WriteLine(g = {0:g}, CurrTime ); // Short date/short time mm/dd/yyyy HH:mm
Console.WriteLine(G = {0:G}, CurrTime ); // Short date/long time mm/dd/yyyy hh:mm:ss
Console.WriteLine(M = {0:M}, CurrTime ); // Month dd
Console.WriteLine(R = {0:R}, CurrTime ); // ddd Month yyyy hh:mm:ss GMT
Console.WriteLine(s = {0:s}, CurrTime ); // yyyy-mm-dd hh:mm:ss can be sorted!
Console.WriteLine(t = {0:t}, CurrTime ); // Short time hh:mm AM/PM
Console.WriteLine(T = {0:T}, CurrTime ); // Long time hh:mm:ss AM/PM
Console.WriteLine(u = {0:u}, CurrTime ); // yyyy-mm-dd hh:mm:ss universal/sortable
Console.WriteLine(U = {0:U}, CurrTime ); // day, month dd, yyyy hh:mm:ss AM/PM
Console.WriteLine(Y = {0:Y}, CurrTime ); // Month, yyyy
Console.WriteLine();
Console.WriteLine(DateTime.Month = + CurrTime.Month); // number of month
Console.WriteLine(DateTime.DayOfWeek = + CurrTime.DayOfWeek); // full name of day
Console.WriteLine(DateTime.TimeOfDay = + CurrTime.TimeOfDay); // 24 hour time
// Numero de intervalos de 100-nanosegundos transcurridos desde el 1/1/0001, 12:00 am
Console.WriteLine(DateTime.Ticks = + CurrTime.Ticks);
Console.Read(); // wait
}
}
Como se ve en el ejemplo el uso de esta clase es realmente sencillo y disponemos de muchisimos formatos para
presentar fechas y horas.
Para mas informacion: http://msdn2.microsoft.com/en-us/library/system.datetime.aspx

Octubre 8, 2007

Exception-Safe Disposal
Posted by gweisz under Coding Tips
No Comments

Muchas veces cuando terminamos de utilizar un recurso debemos liberar el mismo inmediatamente (no
queremos que quede dando vueltas por un tiempo indefinido hasta que el GC* se haga cargo del mismo). Pero
como podemos asegurar que lo hacemos de la forma correcta?
Veamos un ejemplo:
TextReader reader = new StreamReader(filename);
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
reader.Close();
A primera vista pareceria que este codigo no puede fallar pero Que ocurre si el metodo reader.ReadLine()
tira una excepcion? Pues lo que ocurrira sera que el metodo reader.Close() nunca se llamara.
La solucion a este tipo de situaciones es utilizar el bloque finally.
Veamos como quedaria el ejemplo anterior:
TextReader reader = new StreamReader(filename);
try
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
finally
{
reader.Close();
}
En este nuevo codigo el metodo reader.Close() se ejecutara siempre, aun si ocurre una excepcion dentro del
while.

Octubre 8, 2007

Generando numeros al azar


Posted by gweisz under Quick HowTo
[2] Comments

En C# para generar numeros al azar disponemos de la clase System.Random


Veamos un ejemplo:
using System;
static class Program
{
static void Main()
{
Random random;
random = new Random(DateTime.Now.Millisecond);
Console.WriteLine(Numero al azar: + random.Next());
Console.WriteLine(Numero al azar (max 100): + random.Next(100));
Console.WriteLine(Numero al azar (entre 1 y 5): + random.Next(1, 5));
Console.WriteLine(Numero al azar (entre 0 y 1): + random.NextDouble());
}
}
Como vemos en el ejemplo, el constructor de la clase random toma un int como semilla, por lo que podemos
utilizar DateTime.Now.Millisecond para otorgarle una semilla al azar.
Luego vemos las distintas formas de utilizar el metodo random.Next() que basicamente devuelve un entero al
azar y tambien vemos el metodo random.NextDouble() que devuelve un double al azar entre 0 y 1.
Para mayor referencia: http://msdn2.microsoft.com/en-us/library/system.random.aspx

Octubre 7, 2007

Convirtiendo tipos
Posted by gweisz under Quick HowTo
No Comments

Es comun que mientras estamos escribiendo un programa en algun punto del mismo debamos convertir tipos,
y muchas veces descubrimos que esta convercion no esta definida de forma implicita, por ejemplo: Convertir
string a int.
Para estas situaciones disponemos de la clase System.Convert. La misma posee todos los metodos necesario
para poder convertir tipos.
Ejemplo:
// Convirtiendo string a int.
using System;

MyString = Convert.ToString(entero);

Para mayor referencia: http://msdn2.microsoft.com/en-us/library/system.convert.aspx

String.Format
Toda aplicacin que maneje datos tiene que formatearlos. La clase String dispone del mtodo
Format que nos permite formatear una expresin de entrada.
No s vosotros, pero yo siempre olvido los formatos y como obtener los resultados de una u otra
forma. Navengando por ah encontre un sitio que mostraba de forma bastante clara los diferentes
formatos (http://idunno.org/archive/2004/14/01/122.aspx)
Lo que aqui vamos a hacer es ampliar un poco la informacin que se muestra en dicha pgina e
incluir algunos ejemplos.
example

output

String.Format("--{0,10}--", "test");

--

String.Format("--{0,-10}--", "test");

--test

/*

test---

* Rellena con espacios en blanco por la izquierda


* hasta diez posiciones
*/
Console.WriteLine("{0,10} {1}", "Vaya", "Mundo");

/*
* Rellena con espacios en blanco por la derecha
* hasta diez posiciones
*/
Console.WriteLine("{0,-10} {1}", "Vaya", "Mundo");

Formatos estandar de nmeros

Cuando utilizamos los formatos estandar para foramtear nmeros o fechas, lo que estamos
haciendo es emplear la configuracin que hayamos definido en el panel de control. Es
importante tener en cuenta que esta configuracin se lee del equipo que ejecuta la
aplicacion, no del que la visualiza - por ejemplo, una aplicacin web tomar los valores del
servidor no del cliente que accede a la pgina.

Ampliar Imagen]
[

Ampliar Imagen]

Una vez que sabemos a que nos referimos con formatos estandar, podemos entender la
siguiente tabla , que muestra los identificadores de formatos estandar.
specifier

type

output

output
(double 1.2345)

format

(int -12345)

currency

{0:c}

1.23

-12,345.00

decimal
(whole number)

{0:d}

System.FormatException

-12345

exponent / scientific

{0:e}

1.234500e+000

-1.234500e+004

fixed point

{0:f}

1.23

-12345.00

general

{0:g}

1.2345

-12345

number

{0:n}

1.23

-12,345.00

round trippable

{0:r}

1.23

System.FormatException

hexadecimal

{0:x4} System.FormatException

ffffcfc7

El siguiente ejemplo muestra como formatear un valor numrico con el especificador "c", de
currency (moneda).

/*
* Devuelve el formato moneda configurado en el panel de control
*/

string resultado = String.Format("{0:c}", 100.123);


Console.WriteLine(resultado);

Podemos especificar que se aplique la configuracin de una cultura especifica en lugar de la


definida en el panel de control a travs de la clase CultureInfo.

/*
* En este ejemplo se formatea

el valor 20 con el formato de

* moneda de gran bretaa, es decir, mostrar

la libra como

* simbolo de moneda
* */
CultureInfo ingles = new CultureInfo("en-GB");
string dato = String.Format(ingles,"Valor:{0:c}", 20);
Console.WriteLine(dato);

Formato personalizado de nmeros.


Tambin podemos forzar el formato de forma manual, independientemente del formato definido en
el sistema.
specifier

type

format

output
(double 1234.56)

zero placeholder

{0:00.000}

1234.560

digit placeholder

{0:#.##}

1234.56

decimal point placeholder

{0:0.0}

1234.6

thousand separator

{0:0,0}

1,235

percentage

{0:0%}

123456%

El siguiente ejemplo muestra como especificar manualmente el formato.

/*
* Devuelve el nmero formateado con 4 ceros en la parte decimal
*/

string resultado = String.Format("{0:0.0000}", 100.123);


Console.WriteLine(resultado);

Por supuesto podemos formatear ms de un valor.

/*
* Devuelve el primer nmero formateado con 4 ceros en la parte
* decimal y el segundo con dos.
*/

string resultado = String.Format("{0:0.0000} - {1:0.00}",


100.123, 85.125);
Console.WriteLine(resultado);

Formato estandar de fechas


Tambin podemos formatear fechas del mismo modo, en este caso los formatos estandar y
personalizados cambian, pero representan el mismo concepto explicado anteriormente.
specifier

type

output
(June 8, 1970 12:30:59)

Short Date

08/06/1970

Long Date

08 June 1970

Short Time

12:30

Long Time

12:30:59

Full date and time

08 June 1970 12:30

Full date and time (long)

08 June 1970 12:30:59

Default date and time

08/06/1970 12:30

Default date and time (long)

08/06/1970 12:30:59

Day / Month

8 June

RFC1123 date string

Mon, 08 Jun 1970 12:30:59 GMT

Sortable date/time

1970-06-08T12:30:59

Universal time, local timezone

1970-06-08 12:30:59Z

Month / Year

June 1970

El siguiente ejemplo muestra como formatear la fecha de hoy con formato de fecha larga completa,
"F".

/*
* Devuelve la fecha formateada en formato largo segn la
* configuracin del panel de control
*/

string resultado = String.Format("Hoy es {0:F}", DateTime.Now);


Console.WriteLine(resultado);

Formato personalizado de fechas

Del mismo modo podemos personalizar el formato de las fechas. La siguiente tabla muestra los
distintos formatos disponibles.
specifier

output
(June 8, 1970 12:30:59)

type

dd

Day

08

ddd

Short Day Name

Mon

dddd

Full Day Name

Monday

hh

2 digit hour

12

HH

2 digit hour (24 hour)

12

mm

2 digit minute

30

MM

Month

06

MMM

Short Month name

Jun

MMMM

Month name

June

ss

seconds

59

tt

AM/PM

PM

yy

2 digit year

70

yyyy

4 digit year

1970

seperator, e.g. {0:hh:mm:ss}

12:30:59

seperator, e.g. {0:dd/MM/yyyy}

08/06/1970

El siguiente ejemplo muestra aplicar un formato personalizado a un fecha.

/*
* Devuelve la fecha formateada en formato personalizado
*/

string resultado = String.Format("Hoy es {0:dddd} {0:dd/MM/yyy}",


DateTime.Now);
Console.WriteLine(resultado);

Vous aimerez peut-être aussi