martes, 9 de julio de 2013

Libros


Libros digitales de tecnologías Microsoft GRATIS!.

http://blogs.msdn.com/b/mssmallbiz/archive/2013/06/18/huge-collection-of-free-microsoft-ebooks-for-you-including-office-office-365-sharepoint-sql-server-system-center-visual-studio-web-development-windows-windows-azure-and-windows-server.aspx





si alguien encuentra este en pdf que lo comparta

Exam Ref 70-483: Programming in C#


http://www.amazon.com/Exam-Ref-70-483-Programming-C/dp/0735676828/ref=sr_1_2?s=books&ie=UTF8&qid=1373427160&sr=1-2&keywords=70-483

Lenguaje C# Operadores

Lenguaje C# Operadores


Operadores

En C#, un operador es un término o un símbolo que acepta como entrada una o más expresiones,
denominadas operandos, y devuelve un valor. Los operadores que requieren un operando, como el
operador de incremento (++) o new, se denominan operadores unarios. Los operadores que requieren dos
operandos, como los operadores aritméticos (+, -, *, /) se denominan operadores binarios. Un operador, el
operador condicional (?:), utiliza tres operandos y es el único operador terciario de C#.
La instrucción de C# siguiente contiene un solo operador unario y un solo operando. El operador de
incremento, ++, modifica el valor del operando "y".

La instrucción de C# siguiente contiene dos operadores binarios, cada uno con dos operandos. El operador
de asignación, =, tiene el entero y y la expresión 2 + 3 como operandos. La propia expresión 2 + 3 contiene el operador de suma y utiliza los valores enteros 2 y 3 como operandos:


Un operando puede ser una expresión válida de cualquier tamaño, compuesta por una cantidad cualquiera
de otras operaciones.
Los operadores de una expresión se evalúan en un orden concreto conocido como prioridad de operadores. La tabla siguiente divide a los operadores en categorías basadas en el tipo de operación que realizan. Las categorías se muestran en orden de prioridad.



Cuando dos operadores con la misma prioridad están presentes en una expresión, se evalúan según su
asociatividad. Los operadores que son asociativos por la izquierda se evalúan en orden de izquierda a
derecha. Por ejemplo, x * y / z se evalúa como (x * y) / z. Los operadores que son asociativos por la derecha se evalúan en orden de derecha a izquierda. Los operadores de asignación y el operador terciario (?:) son asociativos por la derecha. Todos los otros operadores binarios son asociativos por la izquierda. Sin embargo, el estándar de C# no especifica cuándo se ejecuta la parte "fija" de una instrucción de incremento en una expresión.
Por ejemplo, el resultado del código de ejemplo siguiente es 6:

Sin embargo, el resultado del código de ejemplo siguiente es indefinido:


Por consiguiente, no se recomienda el último ejemplo. Los paréntesis se pueden utilizar para envolver una
expresión y hacer que esa expresión sea evaluada antes que cualquier otra. Por ejemplo, 2 + 3 * 2
normalmente darían 8 como resultado. Esto es porque los operadores multiplicativos tienen prioridad sobre
los operadores aditivos. Escribir la expresión (2 + 3 ) * 2 da como resultado 10, ya que ésta indica al
compilador de C# que el operador de adición (+) se debe evaluar antes que el operador de multiplicación (*).


Operadores Sobrecargables

C# permite sobrecargar operadores en los tipos definidos por el usuario, mediante la definición, con la
palabra clave operator, de funciones miembro estáticas. No obstante, no todos los operadores se pueden
sobrecargar y algunos presentan restricciones, como se indica en la siguiente tabla:


Sobrecargar un operador en una clase personalizada requiere la creación de un método en la clase con la
firma correcta. El método se debe denominar "operador X", donde X es el nombre o símbolo del operador
que se va a sobrecargar. Los operadores unarios tienen un parámetro y los operadores binarios tienen dos.






martes, 5 de marzo de 2013

Lenguaje C# Parte 5 Herencia, Clases Abstractas, Polimorfismo

Lenguaje C# Parte 5 Herencia, Clases Abstractas, Polimorfismo

Herencia de Clases


La herencia se realiza a través de una derivación, lo que significa que una clase se declara utilizando una
clase base de la cual hereda los datos y el comportamiento. Las clases pueden heredar de otra clase. Para
conseguir esto, se coloca un signo de dos puntos después del nombre de la clase al declarar la clase y se denomina la clase de la cual se hereda (la clase base) después del signo de dos puntos.


En el ejemplo anterior, la clase B es claramente B y A. Cuando se tiene acceso a un objeto B, se puede utilizar la operación de conversión de tipos para convertirlo en un objeto A (casting o conversión explícita). La conversión de tipos no cambia el objeto B, pero la vista del objeto B se restringe a los datos y comportamientos de A. Después de convertir un objeto B en un objeto A, es posible volver a convertir ese objeto A en un objeto B. No todas las instancias de A se pueden convertir en B, sólo aquellas que son realmente instancias de B. Si se tiene acceso a la clase B como tipo B, se obtienen los datos y comportamientos tanto de la clase A como de la clase B. 
Nota: Las estructuras no pueden heredar de otras estructuras o clases.


Clases y miembros de clase abstractos y sellados

La palabra clave abstract permite crear clases y miembros de clase únicamente con propósitos de herencia: para definir características de clases derivadas, no abstractas. La palabra clave sealed permite impedir la 
herencia de una clase o de ciertos miembros de clase marcados previamente como virtuales.


Clases y miembros de clase abstractos

Las clases se pueden declarar como abstractas. Esto se obtiene colocando la palabra clave abstract antes de la palabra clave class en la definición de clase.


No se pueden crear instancias de una clase abstracta. El propósito de una clase abstracta es proporcionar una definición común de una clase base que múltiples clases derivadas pueden compartir. Por ejemplo, una biblioteca de clase puede definir una clase abstracta que se utiliza como parámetro para muchas de sus funciones y solicitar a los programadores que utilizan esa biblioteca que proporcionen su propia implementación de la clase mediante la creación de una clase derivada.


Las clases abstractas también pueden definir métodos abstractos. Esto se consigue agregando la palabra
clave abstract antes del tipo de valor que devuelve el método.

Los métodos abstractos no tienen ninguna implementación, de modo que la definición de método va
seguida por un punto y coma en lugar de un bloque de método normal. Las clases derivadas de la clase
abstracta deben implementar todos los métodos abstractos. Cuando una clase abstracta hereda un método virtual de una clase base, la clase abstracta puede reemplazar el método virtual con un método abstracto.


Si un método virtual se declara abstracto, sigue siendo virtual para cualquier clase que se herede de la clase abstracta. Una clase que hereda un método abstracto no puede tener acceso a la implementación original del método; en el ejemplo anterior, Algo() de la clase F no puede llamar a Algo() de la clase D. De esta forma, una clase abstracta puede obligar a las clases derivadas a proporcionar nuevas implementaciones de método para los métodos virtuales.


Clases y miembros de clase sellados

Las clases pueden declararse como selladas. Esto se logra colocando la palabra clave sealed antes de la
palabra clave class en la definición de clase.



Una clase sellada no se puede utilizar como clase base. Por esta razón, tampoco puede ser una clase abstracta. Las clases selladas se utilizan principalmente para impedir la derivación. Puesto que nunca se pueden utilizar como una clase base, algunas optimizaciones en tiempo de ejecución pueden hacer que sea un poco más rápido llamar a miembros de clase sellada.

Un miembro de clase, método, campo, propiedad o evento de una clase derivada que reemplaza a un
miembro virtual de la clase base puede declarar ese miembro como sellado. Esto niega el aspecto virtual del miembro para cualquier clase derivada adicional. Esto se logra colocando la palabra clave sealed antes de la palabra clave override en la declaración del miembro de clase.


Polimorfismo

A través de la herencia, una clase puede utilizarse como más de un tipo; puede utilizarse como su propio
tipo, cualquier tipo base o cualquier tipo de interfaz si implementa interfaces. Esto se denomina
polimorfismo. En C#, todos los tipos son polimórficos. Los tipos se pueden utilizar como su propio tipo o
como una instancia de Object, porque cualquier tipo trata automáticamente a Object como tipo base.

El polimorfismo no sólo es importante para las clases derivadas, sino también para las clases base.
Cualquiera que utilice la clase base podría, de hecho, estar utilizando un objeto de la clase derivada que se haya convertido en el tipo de clase base. Los diseñadores de una clase base pueden anticipar qué aspectos de su clase base cambiarán probablemente para un tipo derivado. Por ejemplo, es posible que una clase base para automóviles contenga un comportamiento sujeto a cambios si el automóvil en cuestión es un vehículo familiar o uno descapotable. Una clase base puede marcar esos miembros de clase como virtuales, lo cual permite que las clases derivadas que representan automóviles descapotables y vehículos familiares reemplacen ese comportamiento.

Cuando una clase derivada hereda de una clase base, obtiene todos los métodos, campos, propiedades y eventos de la clase base. Para cambiar los datos y el comportamiento de una clase base, existen dos opciones: se puede reemplazar el miembro base por un nuevo miembro derivado o se puede reemplazar un miembro base virtual.

Para reemplazar un miembro de una clase base por un nuevo miembro derivado, se requiere la palabra clave new. Si una clase base define un método, campo o propiedad, la palabra clave new se utiliza para crear una nueva definición de ese método, campo o propiedad en una clase derivada. La palabra clave new se coloca antes del tipo de valor devuelto de un miembro de clase que se reemplaza.


Cuando se utiliza la palabra clave new, se llama a los nuevos miembros de clase en lugar de los miembros de
clase base que se han reemplazado. Esos miembros de clase base se denominan miembros ocultos. Aún es
posible llamar a los miembros de clase ocultos si una instancia de la clase derivada se convierte en una
instancia de la clase base.

Para que una instancia de una clase derivada controle por completo un miembro de clase de una clase base, la clase base debe declarar ese miembro como virtual. Esto se consigue agregando la palabra clave virtual antes del tipo de valor devuelto del miembro. Una clase derivada tiene entonces la opción de utilizar la palabra clave override, en lugar de new, para reemplazar la implementación de la clase base por la propia.

Los métodos y propiedades virtuales permiten hacer planes para una expansión futura. El hecho de llamar a un miembro virtual sin importar cuál es el tipo que el llamador utiliza proporciona a las clases derivadas la opción de cambiar completamente el comportamiento aparente de la clase base.
Los miembros virtuales siguen siendo virtuales de forma indefinida, independientemente de cuántas clases se hayan declarado en la clase que originalmente declaró el miembro virtual. Si la clase A declara un miembro virtual, la clase B deriva de A y la clase C deriva de B, la clase C hereda el miembro virtual y tiene la opción de reemplazarlo, independientemente de si la clase B declaró la sustitución de ese miembro.


















miércoles, 20 de febrero de 2013

Lenguaje C# Parte 4 Objetos y Clases


Lenguaje C# Parte 4 Objetos y Clases

Objetos

Los objetos son construcciones de programación que se componen de datos, comportamiento e identidad.
Los datos del objeto se encuentran en los campos, propiedades y eventos del objeto; los métodos e
interfaces del objeto definen los comportamientos del objeto, pero estos residen en la definición del tipo al
que pertenece el objeto.
Los objetos tienen identidad, es decir, dos objetos con el mismo conjunto de datos no son necesariamente
el mismo objeto.
En C#, los objetos se definen mediante classes y structs, que conforman el plano único a partir del cual
operan todos los objetos de ese tipo.

Los objetos tienen las propiedades siguientes:


  • Todo lo que se utiliza en C# es un objeto, incluidos los formularios Windows Forms y los controles.
  • Se crean instancias de objetos; es decir, éstos se crean a partir de plantillas definidas por clases y estructuras.
  • Los objetos utilizan Propiedades (Guía de programación de C#) para obtener y cambiar la información que contienen.
  • A menudo, los objetos tienen métodos y eventos que les permiten realizar acciones.
  • Visual Studio proporciona herramientas para manipular objetos: la Propiedades (Ventana) permite cambiar los atributos de los objetos, como formularios Windows Forms. El Examinador de objetos permite examinar el contenido de un objeto.
  • Todos los objetos de C# heredan de Object.

Clases

En C#, una clase es un tipo de datos muy eficaz. Como las estructuras, las clases definen los datos y el
comportamiento del tipo de datos. Los programadores pueden crear objetos que son instancias de una
clase. A diferencia de las estructuras, las clases admiten herencia, que es una parte fundamental de la
programación orientada a objetos.

Declarar clases

Las clases se definen mediante la palabra clave class.


El nivel de acceso precede a la palabra clave class. En este caso, se utiliza public, que significa que cualquiera puede crear objetos a partir de esta clase. El nombre de la clase sigue a la palabra clave class.

Tipos 

Todos los tipos y miembros de tipo tienen un nivel de accesibilidad, que controla si pueden utilizarse por
otro código de su ensamblado u otros ensamblados.

  • public: Puede obtener acceso al tipo o miembro cualquier otro código del mismo ensamblado o de otro ensamblado que haga referencia a éste.
  • prívate: Solamente puede obtener acceso al tipo o miembro código de la misma clase o estructura.
  • protected: Solamente puede obtener acceso al tipo o miembro código de la misma clase o estructura o de una clase derivada.
  • internal: Puede obtener acceso al tipo o miembro cualquier código del mismo ensamblado, pero no de un ensamblado distinto.
  • protected internal: Puede obtener acceso al tipo o miembro cualquier código del mismo ensamblado o cualquier clase derivada de otro ensamblado.
La estructura genérica de una clase es:

Crear objetos

Aunque se utilizan a veces de forma intercambiable, una clase y un objeto son cosas diferentes. Una clase
define un tipo de objeto, pero no es propiamente un objeto. Un objeto es una entidad concreta basada en
una clase y, a veces, se denomina instancia de una clase.
Los objetos se pueden crear con la palabra clave new seguida del nombre de la clase en la que se basará el objeto.


Este código crea dos referencias a objeto que se refieren al mismo objeto. Por consiguiente, los cambios
realizados en el objeto a través de object3 se reflejarán en los usos posteriores de object4. El hecho de que
las clases se conozcan como tipos de referencia se debe a que se hace referencia a los objetos basados en clases por referencia.



Las clases tienen las propiedades siguientes:

  1. A diferencia de C++, sólo se admite una herencia única: una clase puede heredar la implementación solamente de una clase base.
  2. Una clase puede implementar más de una interfaz.
  3. Las definiciones de clase se pueden dividir entre archivos de código fuente diferentes. Para ello C# permite la definición de clases parciales.
  4. Las clases estáticas son clases selladas que contienen sólo métodos estáticos.

Enumeraciones

Las enumeraciones son un tipo de dato distinto que corresponde a un conjunto de constantes con nombre
denominado lista de enumeradores. La palabra clave enum se utiliza para declarar una enumeración. Cada 
tipo de enumeración tiene un tipo subyacente, que puede ser cualquier tipo integral excepto char. El tipo 
predeterminado subyacente de los elementos de la enumeración es int. De forma predeterminada, el 
primer enumerador tiene el valor 0 y el valor de cada enumerador sucesivo se incrementa en 1.

A una variable de tipo Dias se le puede asignar cualquier valor en el intervalo del tipo subyacente; los
valores no se limitan a las constantes con nombre

El tipo subyacente especifica el almacenamiento asignado para cada enumerador. No obstante, se necesita una conversión explícita (casting), para convertir un tipo enum al tipo entero subyacente. Por ejemplo, la siguiente instrucción asigna el enumerador Lunea a una variable de tipo int utilizando una conversión explícita para convertir de enum a int.


En este ejemplo, se declara la enumeración Dias. Dos enumeradores se convierten explícitamente en un
número entero y se asignan a variables de número entero.






________________________________________________________________________


miércoles, 13 de febrero de 2013

Lenguaje C# Parte 3 Instrucciones

Lenguaje C# Parte 3

Instrucciones

Una instrucción es una unidad de creación de procedimientos a partir de la cual se construyen todos los
programas de C#. Una instrucción puede declarar una variable o constante local, llamar a un método, crear
un objeto o asignar un valor a una variable, propiedad o campo.
Una serie de instrucciones que aparecen entre llaves forma un bloque de código. El cuerpo de un método es un ejemplo de bloque de código. A menudo, los bloques de código siguen una instrucción de control. Las
variables o constantes declaradas dentro de un bloque de código sólo están disponibles para las
instrucciones dentro del mismo bloque de código.

Las instrucciones de C# a menudo contienen expresiones. Una expresión de C# es un fragmento de código
que contiene un valor literal, un nombre simple o un operador y sus operandos. Las expresiones más
comunes, cuando se evalúan, producen un valor literal, una variable o una propiedad de objeto.
Evalúa como un resultado de valor lógico se asigna a una variable de tipo bool

Instrucciones de selección

Una instrucción de selección hace que el control del programa se transfiera a un determinado punto del
flujo de ejecución dependiendo de si cierta condición es true o no (false/null). Son también conocidas como
instrucciones de bifurcación, ya que determinan un camino definido a seguir en la ejecución del programa.

if-else

La instrucción if selecciona una instrucción para ejecución en base al valor de una expresión lógica.

Para poder evaluar la igualdad de dos operandos se utiliza el operador “==”

También es posible extender la instrucción if de modo que puedan controlarse varias condiciones, mediante la construcción else-if.

switch

La instrucción switch es una instrucción de control que controla múltiples selecciones y enumeraciones.

Si ninguna expresión case coincide con el valor de la instrucción switch, entonces el control se transfiere a las instrucciones que siguen la etiqueta default opcional. Si no existe ninguna etiqueta default, el control se transfiere fuera de la instrucción switch.

Instrucciones de iteración

Las instrucciones de iteración permiten crear bucles. En un bucle, las instrucciones internas se ejecutan un
determinado número de veces, según el criterio de terminación del bucle.

do

La instrucción do ejecuta una instrucción o un bloque de instrucciones entre {} repetidamente hasta que una expresión especificada se evalúe como false.

El Resultado del bloque anterior será una impresión secuencial: 0, 1, 2 … 5.

A diferencia de la instrucción while, un bucle do-while se ejecuta una vez antes de que se evalúe la expresión 
condicional.


for

El bucle for ejecuta una instrucción o un bloque de instrucciones repetidamente hasta que una determinada
expresión se evalúa como false. El bucle for es útil para recorrer en iteración matrices y para procesar
secuencialmente.

La instrucción for ejecuta la instrucción o instrucciones internas repetidamente del siguiente modo:
  • Primero, se evalúa el valor inicial de la variable i.
  • A continuación, mientras el valor de i sea menor o igual que 5, la condición se evalúa como true, se ejecuta la instrucción Console.WriteLine y se vuelve a evaluar i.
  • Cuando i es mayor que 5, la condición se convierte en false y el control se transfiere fuera del bucle.
Todas las expresiones de la instrucción for son opcionales; por ejemplo para crear un bucle infinito:

foreach

La instrucción foreach repite un grupo de instrucciones incluidas en el bucle para cada elemento de una
matriz o de un objeto collection. La instrucción foreach se utiliza para recorrer en iteración una colección de
elementos y obtener la información deseada, pero no se recomienda para cambiar el contenido de la
colección.
Esencialmente lo que se debe especificar en el bucle foreach es una “variable de paso” del tipo que
colecciona la matriz o colección, este elemento tomará la identidad del ítem que se recorre de manera
secuencial en la matriz o acorde al iterador de la colección.


Una de las ventajas que proporciona en bloque foreach, es que no se debe trabajar con una variable de paso 
interna cuando es requerida una conversión explícita para un tipo definido por el usuario al recorrer 

colecciones. Si bien for nos permitiría realizar este recorrido, es necesario definir una variable de paso para 

realizar el casting, acción que es realiza de manera automática en foreach.




while

La instrucción while ejecuta una instrucción o un bloque de instrucciones repetidamente hasta que una
expresión especificada se evalúa como false.


Como la comprobación de la expresión while tiene lugar antes de la ejecución del bucle, las instrucciones 
internas de un bucle while pueden no llegar a ejecutarse.

Instrucciones para el control de excepciones

C# incorpora mecanismos para el tratamiento de las situaciones anómalas, denominadas excepciones, que pueden producirse durante la ejecución de un programa.

Para el manejo de las excepciones, C# nos provee de un bloque try…catch, la clausula throw y el bloque finally.

try .... catch


Este ejemplo muestra un bloque try…catch en acción. Antes del bloque, se declara un arreglo de enteros con
tres elementos, dentro del bloque hay un bucle for el cual poblará el arreglo con números enteros, 
considerando 4 elementos. El bucle for imprime el elemento y posteriormente lo asigna a su posición. 
Todo trabaja bien hasta que se llega a la cuarta iteración del bucle for. Debido a que el arreglo solo puede 
contener tres elementos, se produce una excepción al intentar acceder al cuarto elemento (índice 3). Esto 
genera una excepción, ocasionando que el flujo de control del programa salte al bloque catch.

finally

Una importante consideración es que el bloque finally, se ejecutará si o si, se ha generado una excepción,
por lo tanto debemos ser cautos en su utilización. Por ello se debe tener presente que este bloque es para
garantizar la ejecución de un set de instrucciones, se produzca o no una excepción.

throw

Este nos
permitirá pasar la excepción generada al bloque try…catch padre o a la línea de programa desde donde se 
llamó el método, si es que no podemos o no debemos manejar la excepción en el lugar donde se produce.

Otro uso que podemos dar a la clausula throw, es para enmascarar o cambiar el tipo de excepción. En tal
caso controlamos la excepción original y luego generamos la excepción que deseamos.







________________________________________________________________________

martes, 12 de febrero de 2013

Lenguaje C# Parte 2. 2 Matrices

Lenguaje C# Parte 2. 2



Matrices (arreglos)

Un arreglo o matriz es una estructura de datos que contiene una serie de variables del mismo tipo. Las
matrices se declaran con un tipo:

Los ejemplos siguientes crean matrices unidimensionales, multidimensionales y escalonadas:

Propiedades de una matriz:



  • Una matriz puede ser unidimensional, multidimensional o escalonada.
  • El valor predeterminado de los elementos numéricos de matriz se establece en cero y el de los elementos de referencia se establece en null.
  • Una matriz escalonada es una matriz de matrices y por consiguiente sus elementos son tipos de referencia y se inicializan en null.
  • Las matrices se indizan basadas en cero: una matriz con n elementos se indiza desde 0 hasta n-1.
  • Los elementos de una matriz pueden ser de cualquier tipo, incluido el tipo matriz.
  • Los tipos de matriz son tipos de referencia derivados del tipo base abstracto Array. Puesto que este tipo implementa IEnumerable e IEnumerable, puede utilizar la iteración foreach en todas las matrices de C#.


Utilizar matrices como objetos

En C#, las matrices son de hecho objetos, y no simplemente regiones direccionables de memoria contigua
como ocurre en C y C++. Array es el tipo base abstracto de todos los tipos de matriz. Las propiedades y otros miembros de la clase Array se pueden utilizar cuando sea necesario.

Matrices unidimensionales

Una matriz de cinco elementos enteros se puede declarar como se muestra en el ejemplo siguiente:
Esta matriz contiene elementos desde array[0] hasta array[4]. El operador new se utiliza para crear la matriz e inicializar sus elementos con valores predeterminados. En este ejemplo, todos los elementos de la matriz se inicializan con cero.

Inicialización de matrices

Es posible inicializar una matriz en el momento de su declaración, en cuyo caso, no es necesario el
especificador de rango ya que éste viene dado por el número de elementos de la lista de inicialización

Matrices de tipo de valor y tipo de referencia

El resultado de esta instrucción depende de si ClaseType es un tipo de valor o un tipo de referencia. Si es un tipo de valor, la instrucción genera una matriz de 10 instancias del tipo ClaseType . Si  ClaseType es un tipo de referencia, la instrucción crea una matriz de 10 elementos, cada uno de los cuales se inicializa con una referencia nula.

Matrices multidimensionales

Las matrices pueden tener varias dimensiones:

Inicialización de matrices

La matriz se puede inicializar en la declaración.

Matrices escalonadas

Una matriz escalonada es una matriz cuyos elementos son matrices. Los elementos de una matriz
escalonada pueden ser de diferentes dimensiones y tamaños.

Cada elemento es una matriz unidimensional de enteros. El primer elemento es una matriz de 5 enteros, el segundo es una matriz de 4 enteros y el tercero es una matriz de 2 enteros.

También se pueden utilizar inicializadores para rellenar los elementos de la matriz con valores, en cuyo caso no es necesario especificar el tamaño de la matriz:




________________________________________________________________________



lunes, 11 de febrero de 2013

Lenguaje C# Parte 2. 1 Conversiones


Lenguaje C# Parte 2. 1

Conversiones de Tipos 

La conversión se refiere a la capacidad de cambiar un objeto de un tipo a otro. Se trata de una característica relativa al tiempo de ejecución, en lugar de al tiempo de compilación. Las conversiones pueden ser implícitas o explícitas; las conversiones implícitas tienen lugar cuando es posible una conversión automática, mientras que las conversiones explícitas se invocan cuando existe la posibilidad de un error ó pérdida de datos.

Conversión boxing y unboxing 

La unificación del sistema de tipos define también técnicas denominadas boxing y unboxing . Aquí es donde los tipos primarios y los tipos de referencia pueden utilizarse indiferentemente. Las conversiones boxing y unboxing permiten tratar los tipos de valor como objetos. La aplicación de la conversión boxing a un tipo de valor, empaqueta el tipo en una instancia del tipo de referencia Object. Esto permite almacenar el tipo de valor en la pila del recolector de elementos no utilizados (garbage collector). La conversión unboxing extrae el tipo de valor del objeto.

Boxing 

Es el proceso usado para convertir un tipo primitivo en un tipo de referencia. Para implementar esto, lo único que hace falta es asignar el tipo primitivo a un objeto.

Unboxing 

Es el proceso contrario al boxing, ya conocemos el tipo subyacente de un objeto que ha sido convertido (boxed), por lo tanto, lo único que debemos hacer es devolver al objeto a su tipo primitivo original, asignándolo de nuevo a un campo de su tipo primario original.

Conversiones Implícitas 

Las conversiones implícitas tienen lugar de forma automática, sin necesidad de ninguna sintaxis ni ensayo adicional. Por ejemplo, la conversión de int a long.


DeA
shortintlongfloatdouble o decimal
shortushortintuintlongulongfloatdouble o decimal
intlongfloatdouble o decimal
intuintlongulongfloatdouble o decimal
longfloatdouble o decimal
longulongfloatdouble o decimal
floatdouble o decimal
ushortint, uint, longulong, float, double o decimal
double
floatdouble o decimal


Conversiones Explícitas 

Este tipo de conversión es requerida cuando existe la posibilidad de una pérdida de datos o la aparición de un error. Para implementar este tipo de conversión, se ha de insertar un operador cast delante de la expresión de origen. Un operador cast no es más que el nombre del tipo que va a ser convertido, encerrado entre paréntesis.

Conversiones con Parsing 

El parseo de información, se trata de otro mecanismo para poder llevar información desde un string a un tipo de dato. Esta acción es facilitada por el método Parse() que implementan los tipos numéricos y de fecha.
A diferencia del proceso de casting de la conversión explícita, si el valor a convertir excede la capacidad del tipo de dato se producirá una excepción del tipo OverflowException , dando aviso del desbordamiento. Otra consideración de excepción se da cuando el valor literal no puede ser traducido al tipo destino como en el siguiente ejemplo: 
Para evitar que se pueda producir una excepción al momento de realizar el parsing, C# provee de un método para evaluar el parsing antes de realizarlo mediante el método TryParse(), este realizará una evaluación y retornará un valor del verdad indicando el éxito del proceso y adicionalmente el valor convertido en una variable de salida (out). 

DESCARGAR DEMO






________________________________________________________________________