Este post es para dar temas que hay en el post de programando en C# 22 y que no fueron dados aún.
En primer lugar todo lo que tiene que ver con cast, y lo siguiente con objetos anónimos.
El cast (o casteo... palabra castellanizada) es cuando se trata de que el programa tome una variable de un tipo, como si fuera de otro tipo. Es decir, si tengo una variable de números enteros y quiero que esa variable sea vista.
Esto en C# solo funciona con objetos o con tipos de datos que guardan alguna relación, como por ejemplo, teniendo el tipo de dato objetc donde guarda cualquier cosa, al devolver ese "object" le tenemos que decir al sistema de qué tipo de objeto se trata.
Otro ejemplo es cuando tenemos un tipo de datos double y lo queremos igualar a otro tipo de datos entero. Ojo, no funciona con cualquier tipo de datos.
Un ejemplo de lo que estoy hablando:
Como vemos en el ejemplo, tenemos el tipo de variable genérica "object" donde le decimos que va a contener datos de la variable a.
La variable b, que es el "object" no sabe de qué tipo de dato se trata, por tanto hay que decirle al sistema de qué tipo de dato se trata para que lo pueda interpretar.
Tengan en cuenta que esto no tiene que ver con la conversión de los tipos de datos explícitos con la clase Convert, esta clase, si bien dimos muy poco sobre ella, es la que convierte los tipos de datos en otros tipos, como por ejemplo de string a int, o de double a string, o de string a char. Ejemplo:
Como ven, hay una gran diferencia, donde la conversión del tipo de datos es implícita en el casteo, y explícita en la conversión (Para los que ven java, la conversión explícita se da con las clases Integer, Char, Double, Float, String, etc, donde cada una de ellas maneja el tipo de conversión de datos a si mismas con función parseXXX).
Como vemos, el casteo es importante para los tipos de datos de listas enlazadas, donde el tipo de datos que manejan son object, por tanto, si tengo un grupo de elementos guardado en un ArrayList, y todos son de distintos tipos, habrá que castear cada tipo respectivamente.
Con respecto a las clases anónimas, estas se dan sin necesidad que le tengas que poner un nombre o variable para identificarla.
Supongamos, tenemos un método dentro de una clase donde recibe una fecha de la clase DateTime, dentro del método, para identificarla voy a tener una variable que la identifique, pero no es necesario que al declarar el método cuando estoy usando el objeto, lo tenga que hacer de manera no anónima. Un ejemplo:
Y el uso en cuestión de la manera en que todos conocemos:
Ahora el modo que quiero mostrarles:
Como ven, el objeto no tiene nombre y entra en el método. Dentro de Class1 va a tener nombre, pero como objeto que cree de la instancia Class1 (que es "c" ), no tiene nombre.
Cuando escriba algún día sobre diagramas, este tipo de datos tiene su relevancia.
En primer lugar todo lo que tiene que ver con cast, y lo siguiente con objetos anónimos.
El cast (o casteo... palabra castellanizada) es cuando se trata de que el programa tome una variable de un tipo, como si fuera de otro tipo. Es decir, si tengo una variable de números enteros y quiero que esa variable sea vista.
Esto en C# solo funciona con objetos o con tipos de datos que guardan alguna relación, como por ejemplo, teniendo el tipo de dato objetc donde guarda cualquier cosa, al devolver ese "object" le tenemos que decir al sistema de qué tipo de objeto se trata.
Otro ejemplo es cuando tenemos un tipo de datos double y lo queremos igualar a otro tipo de datos entero. Ojo, no funciona con cualquier tipo de datos.
Un ejemplo de lo que estoy hablando:
<?
string a = "hola mundo";
object b = a;
string c = (string)b;
>
Como vemos en el ejemplo, tenemos el tipo de variable genérica "object" donde le decimos que va a contener datos de la variable a.
La variable b, que es el "object" no sabe de qué tipo de dato se trata, por tanto hay que decirle al sistema de qué tipo de dato se trata para que lo pueda interpretar.
Tengan en cuenta que esto no tiene que ver con la conversión de los tipos de datos explícitos con la clase Convert, esta clase, si bien dimos muy poco sobre ella, es la que convierte los tipos de datos en otros tipos, como por ejemplo de string a int, o de double a string, o de string a char. Ejemplo:
<?
string a = "1234";
int b = Convert.ToInt16(a); //ToInt16, 32 o 64 son los distintos tamaños de números, en posts anteriores expliqué el uso de la clase Int64 como tipo numérico de grandes embergaduras (sería el long en otros lenguajes).
Como ven, hay una gran diferencia, donde la conversión del tipo de datos es implícita en el casteo, y explícita en la conversión (Para los que ven java, la conversión explícita se da con las clases Integer, Char, Double, Float, String, etc, donde cada una de ellas maneja el tipo de conversión de datos a si mismas con función parseXXX).
Como vemos, el casteo es importante para los tipos de datos de listas enlazadas, donde el tipo de datos que manejan son object, por tanto, si tengo un grupo de elementos guardado en un ArrayList, y todos son de distintos tipos, habrá que castear cada tipo respectivamente.
Con respecto a las clases anónimas, estas se dan sin necesidad que le tengas que poner un nombre o variable para identificarla.
Supongamos, tenemos un método dentro de una clase donde recibe una fecha de la clase DateTime, dentro del método, para identificarla voy a tener una variable que la identifique, pero no es necesario que al declarar el método cuando estoy usando el objeto, lo tenga que hacer de manera no anónima. Un ejemplo:
<?
//El método en cuestión...
DateTime a;
public void miMetodo(DateTime a)
{
this.a = a;
}
>
Y el uso en cuestión de la manera en que todos conocemos:
<?
Class1 c = new Class1();
DateTime a = new DateTime(2011, 7, 27); //entero en año, mes y día.
c.miMetodo(a);
>
Ahora el modo que quiero mostrarles:
<?
Class1 c = new Class1();
c.miMetodo(new DateTime(2011, 7, 27));
>
Como ven, el objeto no tiene nombre y entra en el método. Dentro de Class1 va a tener nombre, pero como objeto que cree de la instancia Class1 (que es "c" ), no tiene nombre.
Cuando escriba algún día sobre diagramas, este tipo de datos tiene su relevancia.