Some Tips to .Net Developers (Algunos tips para los que desarrollamos en .Net)

Este artículo tratará sobre algunos tips o cosas que de repente necesitamos en ciertos momentos y son algo escondidas o difíciles de encontrar en la web.

La estructura será la siguiente

Pregunta-Respuesta

Espero les guste el estilo:

Pregunta

Cuando tengo un error en una página, el cual no pueda controlar, necesito que no aparezca esa pantalla amarilla que siempre aparece mostrándole al cliente un error que no entiende. ¿Cómo puedo hacer una página de error general para toda la aplicación?

Respuesta

Web.config, esa es la respuesta. Se necesita configurar este archivo con los siguientes tags:

Explicaré un poco esto:

defaultRedirect = Acá colocaremos la página hacia donde deseo que se redirija mi aplicación cuando ocurra un error en ésta. Tener mucho cuidado, pues si se coloca como default una página que intencionalmente tiene error, se puede quedar en un bucle infinito debido a que solicitaría a cada momento la página de error.

mode= El modo puede ser de 3 tipos:

- On à Habilita al tag CustomErrors para redirigirse a la página de error que uno indica en defaultRedirect.

- Off à Deshabilita los CustomErrors, de tal forma que si sucede un error, el cliente verá la clásica página amarilla.

- RemoteOnly à Este es el más interesante de todos. Permite mostrar al cliente los CustomErrors ante un error de la aplicación, sin embargo, los errores que ocurren son mostrados al localhost,

Pregunta

Muchas veces llego a escuchar en el trabajo “oe, lo he compilado como 40 veces durante el día y mi máquina ya está lenta, reinicio la PC, cierto?”

Respuesta

NO, para solucionar la limpieza de memoria luego de cierta cantidad de compilaciones que uno realiza a su aplicación, uno puede usar el web.config para esto, de la siguiente manera:


Creo que casi todos conocen lo que hacen las propiedades defaultLanguage y debug, así que no describiré estos, me iré directo al que nos interesa:

numRecompilesBeforeAppRestart = Lo que hace esta propiedad es setear la cantidad de veces que uno debe compilar previamente a que el Visual Studio limpie(libere) la memoria para que así la PC no la sientan tan lenta.

Pregunta

Muchos me han dicho que puedo controlar un evento de varios botones o componentes con un solo método, me averigüe que esto es cierto, pero no tengo idea de cómo saber qué botón fue el que levantó el evento.

Respuesta

Dentro de un evento, normalmente tenemos lo que son (object sender, EventArgs e), pues lo que buscamos está en el primer parámetro que no está por las puras ahí.

Ahora, supongamos que lo que tenemos son 3 botones, el procedimiento para saber cuál levantó el evento el siguiente:

//Obtenemos el elemento casteándolo

Button b = (Button)sender;

//Como sabemos, cada boton tiene un identificador único, entonces nos guiamos por eso

if (b.ID == “miBoton”) {…….}

Obviamente Uds se encargarán de llenar toda la lógica, eso no corresponde a este tutorial =P.

Pregunta

He visto muchas páginas web que pueden detectar tu sistema operativo, tu browser, su versión, si acepta cookies o no, entre otras cosas. Sé que se puede hacer por javascript, hay millones de códigos por toda la red, pero si deseo hacerlo por medio de C# o VB, es esto posible?

Respuesta

SI, para resolver este problema solo tenemos que usar la clase HttpBrowserCapabilities y obtener la propiedad Browser de Request. Es decir, algo así:

HttpBrowserCapabilities miBrowser = Request.Browser;

De esta forma podemos obtener

- Nombre del browser = miBrowser.Browser

- Version del browser = miBrowser.Version

- ¿Es una versión beta mi browser?= miBrowser.Beta

- Sistema operativo = miBrowser.Platform

- Soporte de cookies = miBrowser.Cookies

- Soporte de JavaScript = miBrowser.EcmaScriptVersion

Y pueden obtener muchísimos más datos, pero para este ejemplo, solo deseamos motrar esto.

Pregunta

Obtengo ciertos requisitos de mis clientes que me indican que el título de su página debe de variar según el usuario que ingresa, aparte de tener un diferente estilo de componentes según el usuario, existe alguna clase que me otorgue el .Net para esto?

Respuesta

Sí, para un caso como éste, tenemos una clase muy específica llamada Page, con esta clase podemos obtener varias cosas como el título, la hoja de estilos, el id anónimo del usuario, el queryString, etc. Todo lo que obtenemos podemos modificarlo de tal forma que sea dinámico y varíe según el usuario que ingrese a nuestra aplicación.

Page.Header.Title; //Obtenemos el título de la página y puede setearse

Page.Header.StyleSheet; // Obtenemos la hoja de estilos que va a tener

Page.Request.AnonymousID; // Obtenemos el id anónimo del usuario

Page.Request.QueryString; //Obtenemos el queryString

Resaltaré este último, pues con éste podemos obtener los parámetros que nos pasen por medio de la url, es decir, los parámetros que van luego del símbolo “?”. Como por ejemplo:

http://www.pucp.edu.pe/content/seccionweb_home.php?pIDSeccionWeb=23&pID=103

Eso es todo, espero les haya gustado estos pequeños tips que muchas veces los clientes pueden solicitar, o si deseamos un portal con un portlet con la información del browser del usuario o cosas por el estilo.

---------------ENGLISH----------------

In this article i’m going to show some tips o things that sometimes we need and they are hard to find in the Web.

The structure of the article will be like Question/Answer. I hope you like it:

Question

Sometimes my application have some errors, but i don’t want to show a “yellow page”, because that’s a bad practice. How can I redirect to a custom error page in my entire application?

Answer

Web.config is the answer. You need to configure this file with the next tags:


defaultRedirect = In this property we put the page where we want to redirect our application if we have an error. But, be careful, if you put a page with mistakes in this property, it will cause an infinite loop, because you have a mistake and it will redirect to your custom error page, again, and it will cause a redirect again, again, again….

mode= It have 3 configurations:

- On à Enable the CustomErrors tag to redirect to your Custom Error page.

- Off à It disable the CustomErrors tag, so the client will see the “yellow page” if there is an error.

- RemoteOnly à This is the most interesting configuration. With this configuration the client will see your custom error page, but, the error page will be showed at localhost.

Question

A lot of times i feel that my PC is really slow when I’ve compiled my application a lot of times, and I need to restart it to be ok. What should I do to don’t restart my PC?

Answer

You should clean your memory in automatic way. It can be done with a configuration in the web.config, you just should do:


I think that everybody knows the meaning of defaultLanguage and debug, so i will explain just numRecompilesBeforeAppRestart

numRecompilesBeforeAppRestart = With this property you will indicate to the application that it will clean the memory alter you have compiled “n” times your application. Of this way your PC won’t be slow.

Question

A lot of people tell me that I can control with just one method an event of a lot of components. I investigate it, and that’s true, but how can I know which component triggered the event.

Answer

When we declare a method of a event, it have two parameters (object sender, EventArgs e). Well, we have the answer in the first parameter. We know that our components have an unique Id, so, if we get the id of the component, we can know which component triggered the event. So, we need to do this:

//We get the element casting the sender

Button b = (Button)sender;

//Now, we get the id of the button to recognize which is the component

if (b.ID == “miBoton”) {…….}

Question

I’ve seen a lot of pages that detects your SO, the version of your browser, and other things. I know a way to do it with javascript, but, is there any way to do it with C# or VB?

Answer

Yes, we can do it with the class HttpBrowserCapabilities and we can get it from the property Browser of the class Request. Something like this:

HttpBrowserCapabilities miBrowser = Request.Browser;

Of this way we can get

- Browser’s name = miBrowser.Browser

- Browser’s version = miBrowser.Version

- ¿Is my browser a beta version?= miBrowser.Beta

- SO = miBrowser.Platform

- Support of cookies = miBrowser.Cookies

- Support of JavaScript = miBrowser.EcmaScriptVersion

Obviously you can get more information.

Question

Sometime my clients need to change the title of the page, because it depends of the user, and sometimes, even the style sheet depends of the user. Is there anyway to do this?

Answer

Yes, You can do it with the class Page, you can get and modify the style sheet, title, anonymous id of the user, etc.

Page.Header.Title; //Here we get the title

Page.Header.StyleSheet; // We get the style sheet

Page.Request.AnonymousID; // We get the anonymous Id

Page.Request.QueryString; //we get the queryString

The most important is the queryString, because whit it you can get the parameters of our url. The parameters are next to the symbol “?”. Like this:

http://www.pucp.edu.pe/content/seccionweb_home.php?pIDSeccionWeb=23&pID=103

I hope you enjoyed these little tips that sometimes we need in a little or big application.


Enjoy it =D
I'm waiting your comments =)
Estoy esperando sus comentarios =)


Shinji

How to use multilanguage in JSF? (Cómo usar multilenguaje en JSF?)

Para la creación de una aplicación en JSF que soporte multilenguaje, se pueden seguir los siguientes pasos:


CREAMOS NUESTRO PROPERTIES

La creación de un archivo de texto properties, es para seguir un patrón a seguir por el framework y de esta forma estandarizar.

En este archivo se compone de una forma parecida a un hashmap, es decir, se tiene un key un value. Un ejemplo de este tipo de archivo:

Resources_es.properties

Mensaje1 = Hola

Boton = Seleccionar

Mensaje-Boton = Boton seleccionado

La parte que se encuentra a la izquierda del “=” es el key por el cual ubicaremos nuestro value, que en este caso es un string.

NOTA: No se puede colocar keys de la forma mensaje.submensaje, debido a que el punto “.” es reservado por JSF para obtener las propiedades de los objetos.

CONFIGURAR FACES-CONFIG.XML

El siguiente paso a seguir es el configurar nuestro Faces-Config.xml de tal manera que le indiquemos dónde se encontrará nuestro archivo de mensajes (el properties) y qué idiomas puede soportar, así como también el archivo de mensajes por default. Un ejemplo de configuración se puede ver a continuación:

Faces-config.xml

Ahora explicaremos cómo funciona esto:

El JSF va a tomar en cuenta el archivo que se indica en el message-bundle, el cual servirá para los idiomas respectivos.

El default-locale es el idioma que va a ser elegido por default si es que el locale del cliente no se encuentra dentro de los supported-locale, caso contrario, se elegirá ese supported-locale.

El uso de los locale es el siguiente. Supongamos el caso de Perú, la configuración de la PC está con español(Perú), entonces el locale que va a detectar la aplicación, va a ser “es”, por lo tanto, el archivo de mensajes que utilizará, no será el oracle.backing.pages.view.ApplicationResources.properties, sino que elegirá oracle.backing.pages.view.ApplicationResources_es.properties. Es decir, los archivos se tomarán de la siguiente forma

archivo_la_pa.properties

archivo = oracle.backing.pages.view.ApplicationResources

la = Representa el idioma o lenguaje que se tiene seteado en la configuración de la PC, para el caso de Perú es “es”, para USA “en”, etc.

pa = Representa el pais del cliente, el cual puede ser “pe”, “gb”, etc.

Entonces, teniendo este ejemplo, si es que el cliente es de USA, el archivo que tomará el framework será:

oracle.backing.pages.view.ApplicationResources_en_us.properties

Se deben de colocar tantos como archivos de properties se tenga.

¿CÓMO USAR EL MULTILENGUAJE?

Coloquemos este escenario para entenderlo mejor. El cliente se conecta desde Perú y su PC está configurada en español(Perú). Al momento de conectarse, debe de aparecer un mensaje diciéndole “Hola” en su idioma nativo.

Entonces el código debe de verse de la siguiente forma:

Explicación del código:

Se puede ver que se tiene que colocar un f:loadBundle para tener una variable con el archivo, en su propiedad “basename” colocamos el mismo direccionamiento que colocamos en el faces-config.xml, pero sin la extensión properties.

Y la forma de llamar a alguna de sus keys es con EL Expression, #{msg.Key}, donde Key es la llave que quieren visualizar, de esta forma se verá un mensaje de “Hola”.

¿Cómo modificar el idioma de forma dinámica?

Para la modificación del idioma o archivo de mensajes que utiliza el framework, se tiene que utilizar el siguiente código:

FacesContext miContexto = FacesContext.getCurrentInstance();

Locale miLocale = new Locale("en","us");

miContexto.getViewRoot().setLocale(miLocale);

Donde el constructor de Locale recibe como primer parámetro el lenguaje o idioma, mientras que el segundo parámetro es el país del cliente.

If you want to use multilanguage in JSF, you can follow the next steps:


LET’S CREATE OUR PROPERTIES FILES

Our properties file is like a hashmap, where we have a key and a value. This example is of my properties:

oracle.backing.pages.view.ApplicationResources_es.properties

Mensaje1 = Hola

Boton = Seleccionar

Mensaje-Boton = Boton seleccionado

The part on the left of the “=” is our key, on the right we have our values, this is a string.

NOTA: You can’t put the key of this way mensaje.submensaje, Because JSF uses “.” to get the property of a object.

CONFIGURATION faces-config.xml

The next step is configurate the faces-config.xml, we need to indicate it the browse of our properties and what languages can your application support, also, we need to indicate the language by default. Here we have an example:

Faces-config.xml

Let’s explain it:

JSF will take the file in message-bundle for the languages.

The default-locale is the language by default. If the language of the client is not in the list of supported-locale, JSF will take the default-locale.

How does locale work? Let’s think we are in Perú, we have español(Perú) in our PC configuration. So, the locale will detect “es” as a language, so JSF won’t use oracle.backing.pages.view.ApplicationResources.properties, else

oracle.backing.pages.view.ApplicationResources_es.properties.

Let’s explain more how JSF take the files:

file_la_co.properties

file = oracle.backing.pages.view.ApplicationResources

la = This is the language of the PC.

co = This is the country, like Pe(Perú), US(USA), etc.

So, if the client is from USA, JSF will take the file:

oracle.backing.pages.view.ApplicationResources_en_us.properties

You should have a propertie file for each supported-locale.

¿How to use multilanguage?

For example, if we are in Perú, JSf will show me just spanish messages like “hola”.

Then, we have the next example code:

Here we have f:loadBundle where we put the browse of the properties (this is the same of the faces-config,xml, but without the “.properties”).

The way to call a message is with a EL Expression, like #{msg.Key}.

In our example we well see the message “Hola” of our propertie file oracle.backing.pages.view.ApplicationResources_es.properties.

¿How to change the language of our application?

We can modif. the language or message file of our application with the next code:

FacesContext miContexto = FacesContext.getCurrentInstance();

Locale miLocale = new Locale("en","us");

miContexto.getViewRoot().setLocale(miLocale);

The constructor of Locale will receive (language, country)




ANEXO!!!!(ADITIONAL)
Bueno, comenzaré diciendo que el libro de "JSF IN ACTION" asegura que no se puede usar keys con punto, debido a que es reservado por JSF. Hasta cierto punto esto es cierto, pero hay una forma de seguir con el estándar de usar el punto. ¿Cómo realizarlo?
Para dar el ejemplo, utilizaré el mismo código de antes, pero esta vez haré el cambio. Supongamos que ahora mi properties, tiene un nuevo key que es así:

miKey.mensaje = Nuevo mensaje

Entonces, para llamar a un key de esta forma, modificaremos el código JSF de la siguiente forma



Como pueden ver, en el value del outputText ahora no se coloca msg.key, sino que se hace lo siguiente: msg['miKey.mensaje'], de esta forma mostraremos lo que habíamos colocado antes, es decir "Nuevo mensaje".

Entonces, de esta forma estaremos listos para utilizar los mensajes de una forma multilanguage.
Espero que haya servido esta aclaración, muchas gracias a Lennon Shimokawa por la duda que tuvo, porque sino no hubiese extendido esto para que les sirva más.

Sobre lo de no utilizar el f:loadBundle, creo que hay una forma de hacerlo, que es cargando el Bundle en el BackBean, mas o menos debes de buscarlo en el FacesContext.getCurrentInstance() y algo más, pero a las finales, eso te generará una variable, es decir, estarás haciendo lo mismo que el bundle, pero por backbean.

Yo por el momento para el proyecto en el cual estaremos, he propuesto colocar lo del load bundle en el template, de tal forma que no se tiene que escribir a cada momento.

Un gusto (Luego lo paso a inglés)


Muchas gracias por siempre estar leyendo estos humildes artículos que los hago con tiempo algo ajustado, espero sus opiniones, críticas y colaboraciones. Muy agradecido

Buen día


Thxs everyone for visit my blog and read my articles, i hope you enjoy the article and your comments, opinions, colaborations and others. Thxs =)

bye bye


Shinji


P.d. Does anyone know how to put tags without have problems in the blog?

SEO (Search Engine Optimizer) (Optimizador de motor de búsquedas)

There are a lot of people, companies, and anyone, who want to be in the best place of a search engine. We can find a lot of Companies who want to sell you a position in Yahoo, Google, MSN or any other search engine, but there are a lot of lies and a lot of trues about those companies.

But, there are people who want to get the best place of a search engine, and they get it without a companie. But……HOW??????

First, You need to know about this word….SEO

What’s SEO? How can I eat a SEO? Where can I buy it?

There are a lot of questions about this word, and here, you can find some meaning. If you want more meaning, you can go here à www.google.com

SEO (Search Engine Optimizer) is like a study of how to get traffic from the search engines. So, what do I need to get more traffic from a search engine?

Here is a little list about that:

You need to increase your PR (Page Ranking).

What is PR?

It’s a numeric value that represent how important is that website.

Is it important for a search engine?

It’s really valuable for a search engine like Google, Yahoo and others.

But, how can I increase it?

It’s really to say….but difficult to get it. You just need other page put a link to your page. But, not just that (that’s the difficult part), that page need to have a greater PR than your web site. There is a great example: If www.hi5.com put a link of your website, you will increase your PR and of this way, Google will consider you more important in a search

How can I get someone to put my link?

That’s really hard, but you can put your link in great directories, like:

- www.dmoz.org

- www.femina.com

- www.gogreece.com

- www.sacentral.sa.gov.au/site/page.cfm

- www.worldhot.com

- www.elib.org

- www.ezilon.com

- www.aigam.com

- www.nzs.com

- dir.yahoo.com

- search.msn.com.sg/docs/submit.aspx

- www.google.com/addurl/

You can find in internet a lot of directories who have a big PR, so that’s good for you.

You need keywords in your website

What are keywords?

Keywords are the words that the people need to put in a search engine to find your website. In my case, I need to put words like: Visual Studio, Java, JSF, JDeveloper, Oracle, etc. But if you are a gamer, you can put words like: SNES, NES, PS3, Wii, Nintendo, etc.

Is there any way to put my words more searchable?

Yes, You can find a website where you can find the more searchable words in Internet. Here you have a little list:

- http://buzz.yahoo.com/

- http://www.altavista.com/about/trends

- http://sp.ask.com/docs/about/jeevesiq.html

And here you have website with suggestion about words:

- http://es.espotting.com/popups/keywordgenbox.asp

- http://inventory.overture.com/d/searchinventory/suggestion/

Finally, here you have a good suggestion:

If you want a place with a big PR where you can put the link of your website, you can put it, if you have a myspace, hi5, facebook, fotolog, etc. You can put your link there, and that will generate traffic to your website

Also, don’t forget, your website should be interesting.

I will talk about SEO and how to generate traffic to your website in other article.

Sorry if I have mistakes in my English, I’m from Peru, and we usually talk in Spanish.

Thanks for your visit =)

cya :3


P.d. I will put this same article in spanish

Camino hacia la certificación .Net Web Developer Capítulo 1 - Tipos de variables, Boxing and Unboxing y Casting

Primera entrada, espero sea de su agrado y para aquellos ya expertos, sea algo nostálgico el recordar cómo empezamos en la programación, sin si quiera conocer esto. Empezemos....

En el curso que estoy tomando en Cibertec, me dieron un libro el cual es Microsoft Oficial Course 2956A Core Foundations of Microsoft .Net 2.0 Development (Luego publicaré una fotito :D)

El día de hoy avanzaré hasta donde pueda, creo que llegaré hasta la parte anterior a interfaces, pues este último tema es muy extenso.

Comenzaremos tal como lo hace el libro.

System Types

Estos son, si se puede decir, los tipos de dato pre-construidos. Además, son conocidos como tipos de dato primitivo. (No haré mucho hincapié en este tema que es algo extenso, pero lo mencionaré cuando sea necesario)

Tipos por valor

Son los system types que contienen su data actual asignado a sí mismos (luego explicaré por qué suena algo redundante esto).

Como ejemplos de este tipo tenemos:

- System.Char

- System.Int32

- System.Single, etc.

Características de los tipos por valor:

· Son almacenados en el snack de la memoria.

· Debido a que cada uno tiene directamente su valor, ningún par de tipos por valor, puede apuntar al mismo dato o valor.

· En las llamadas que se pasan por argumentos tipos por valor, lo que se genera es una copia, siendo ésta independiente de la otra. Es decir, si la copia modifica su valor dentro de la llamada, la variable de tipo por valor no se verá afectada.

Ejemplo:

class Program

{

static void Main(string[] args)

{

Int32 valor = 5;

Console.WriteLine(valor);

(new Program()).sumar(valor);

Console.WriteLine(valor);

Console.ReadLine();

}

public void sumar(Int32 valor){

valor += 1;

}

}

Una forma muy simple de visualizar la última característica que mencioné es este código simple, obviamente no sigue normas de nomenclatura ni demás, eso lo veremos luego en 3 secciones completas de prácticas a seguir.

Y antes de dejar este tema, cabe resaltar que un tipo por valor también pueden llegar a ser datos definidos por el desarrollador, como son:

· Estructuras

· Constantes

· Enumeradores

Tipos por referencia (Reference Types)

La diferencia más resaltante de estos system type, es que lo que almacenan es una dirección, la cual recién apunta dónde se encuentra su data. Con esto último podemos adelantarnos a algo, ya que lo único que contiene cada tipo por referencia es una dirección, podemos tener 2 tipos por referencia apuntando al mismo espacio de memoria.

Ahora que hablamos de memoria, destaquemos la 2da característica que lo hace diferente de los tipos por valor. Los tipos por referencia almacenan la dirección en el stack, tal como lo hacen los tipos por valor, PERO su data (es decir, hacia donde apunta la dirección) se encuentra en el heap, el cual es otro espacio de memoria que se encuentra separado del stack.

Tal como dicen, un gráfico explica mejor las cosas, así que acá lo tienen:









Esa es una forma de separar las cosas de mejor forma. si es que llego a conseguir una mejor imagen, en lugar de la que hice, la editaré al instante.

Ejemplo de tipos por referencia:

· Clases

· Interfaces

Boxing y Unboxing

Vamos a definirlas de una forma muy fácil y sencilla.

Boxing es el proceso de convertir un tipo por valor a un tipo por referencia.

Unboxing, como ya lo habrán supuesto, es el proceso de convertir un tipo por referencia a un tipo por valor.

Ejemplos simples:

Boxing

int a = 100;

object o = a;//Acá es donde sucede el boxing

a = 200;

Console.WriteLine("The value-type value = {0}",a );

Console.WriteLine("The object-type value = {0}", o);

Unboxing:

int a = 100;

object o = a;//Acá es donde sucede el boxing

a = 200;

Console.WriteLine(a);

a = (int)o;

Console.WriteLine(a);

Como comentario para aquellos que desean tener un estilo de programación más elegante y más inteligente al momento de hacer las cosas. El boxing y unboxing hacen lento al compilador, pues no es buena práctica hacer esto, siempre hay que buscar alguna otra salida, si es que no la hay, ya en esos casos hay que utilizar el boxing y unboxing, pero donde no recomiendo usarlo es en un loop que va a iterar muchísimas veces, eso sería ser muy criminal con el compilador.

Casting

(Este es el último tema que tocaré por hoy, ya que no pensé que me iba a tomar tanto tiempo el explicar cosas que para nosotros son simples, pero para muchos que recién inician en este mundo es algo importante y les sirve de base)

Siempre hemos escuchado palabras que españolizamos diciendo “debes de castearlo”, “castéalo”, sí, sé que suena feo, pero muchas veces hablamos así y es verdad, dentro del mundo de la programación conocemos esta palabra muy bien.

Casting es el proceso de conversión de tipo de dato (OJO, no es necesariamente convertir un tipo por valor a un tipo por referencia) de uno a otro. Por ejemplo, convertir un Single a un Double, un Int32 a un Double, entre otros.

Existen 2 tipos de Casting:

Casting Implícito: Se da cuando se indica que se debe de hacer el casteo, sino que se le deja el trabajo al compilador. Ejemplo:

Int32 entero;

Double decim;

entero = 100;

decim = entero;

Casting explícito: Es cuando se indica que hay una conversión, ¿para qué hacerlo? para asegurarse que la conversión se realiza sin perder datos. Por ejemplo, en el caso anterior, qué hubiese pasado si la última línea fuese invertida, debido a cómo se almacena cada dato en el stack, se podría llegar a perder algunos datos. Para esto, se indica explícitamente que se desea hacer un casteo, para esto entraré en detalle en unos cuantos tipos de casteo:

· Ctype.- Es un casteo que se realiza aún en VB .net

· ConvertToXXXX.- Se puede utilizar tanto en VB, C# y demás lenguajes que vienen con el Visual Studio, ya que es parte del framework.

· CInt,CDbl,etc .- Se realizaba en VB6 y creo que hasta ahora se puede realizar.

· DirectCast.- Solo sirve para tipos por referencia, no para los tipos por valor.

· TryCast.- Es uno de los mejores casteos existentes en el framework, ya que permite manejar internamente la conversión, de tal forma que si sucede un error, no provoca la caída del programa, sino que maneja el error de forma interna.

La recomendación que les doy a todos aquellos que deseen manejar el casting, usen esta lista priorizando de abajo para arriba, es decir, si es que un día desean hacer un casteo, mejor hacerlo con el último, si es que por casualidad no se acuerdan, usen el DirectCast y así van subiendo hasta no acordarse nada XD.

Tómenlo muy en cuenta si es que desean manejar de una mejor forma sus conversiones de tipos de dato sin necesidad de colocarle un try catch o cosas por el estilo.

Este ha sido todo el primer artículo, luego proseguiré con otros temas como Special System Types, Generics y excepciones.

He intentado ser lo más detallista posible en varios puntos pues sé que este blog no va dirigido solo a personas que tienen más de un año desarrollando.

Mejoraré poco a poco mis artículos, así que las críticas y correcciones son bienvenidas.

Gracias totales =D

Estado: Cansado T_T



Shinji