Herramientas de usuario

Herramientas del sitio


highlevel:chsarp:versions

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
highlevel:chsarp:versions [2009/03/18 12:37]
alfred
highlevel:chsarp:versions [2020/05/09 09:25] (actual)
Línea 208: Línea 208:
 } }
 </​code>​ </​code>​
 +
 +
  
 ==== Tipos implícitos ==== ==== Tipos implícitos ====
 +Es una forma de "​esquivar"​ la declaración del tipo de una variable. Esto va muy bien cuando el tipo de la variable tiene una forma compleja (genéricos,​ query variables (en LINQ)...). \\ \\ 
 +Para declarar una variable con tipado implícito se utiliza la clausula ''​var''​.
 +<code csharp>
 +var myList = new List<​int>​();​
 +myList.Add( 1 );
 +myList.Add( 2 );
 +myList.Add( 3 );
 +foreach( var i in myList ) 
 +    Console.WriteLine( i );
 +</​code>​
 +
 +También podemos asigndar directamente el valor y la variable tomará el tipo de dicho valor:
 +<code csharp>
 +var i = 10;
 +Console.WriteLine("​El tipo de i es: {0} ({1})",​ i.GetType().Name,​ i);
 +</​code>​
 +O...
 +<code csharp>
 +SqlCommand cmd = new SqlCommand("​select * from personas",​ con);
 +var dr = cmd.ExecuteReader();​
 +</​code>​
 +
 +Pero no podemos declarar una variable con tipado implícito sin indicar el valor, por ejemplo el siguiente código daría error:
 +<code csharp>
 +var variable;
 +</​code>​
 +
 +==== Métodos de extensión ====
 +Permiten añadir nuevos métodos a clases ya existentes sin tener que recompilar. ​
 +Para utilizarlos lo que haremos será crear una clase estática con un método estático de un único parámetro, si antes de la definición del tipo de dicho parámetro colocamos la palabra '​this'​ el método pasará a ser un método de extensión para los objetos del mismo tipo que el parámetro:
 +<code csharp>
 +static class MyExtensions {
 +    public static bool isValidEmail(this string str) {
 +        return true;
 +    }
 +}
 +</​code>​
 +Ahora dicho método puede ser utilizado en los objetos de este tipo:
 +<code csharp>
 +string str = "";​
 +str.isValidEmail();​
 +</​code>​
 +Si la clase no pudiese ser accedida (debido a que está en otro namespace o librería necesitaríamos utilizar la clausula '​using':​
 +<code csharp>
 +using MyExtensions;​
 +</​code>​
 +Si quisieramos que se pudiese pasar algún argumento a este método entonces añadiremos otro parámetro al método de extensión:
 +<code csharp>
 +public static bool isIn(this string str, IEnumerable<​string>​ col)
 +{
 +    foreach (string s in col)
 +        if (s.CompareTo(str) == 0)
 +            return true;
 +    return false;
 +}
 +// Y luego...
 +List<​string>​ lStr = new List<​string>​ { "​Hi",​ "​Hello",​ "Bon Journo"​ };
 +string str = "​Hola";​
 +str.isIn(lStr);​
 +</​code>​
  
 ==== Expresiones Lambda ==== ==== Expresiones Lambda ====
Línea 258: Línea 320:
 </​code>​ </​code>​
  
 +En la versión 3.0 del framework se han agregado métodos de extensión para colecciones que aprovechan el poder de las expresiones lambda. Por ejemplo el siguiente método myWhere: 
 +<code csharp>​ 
 +static class myExtensions { 
 +    public static List<​T>​ myWhere<​T>​(this IEnumerable<​T>​ source, Func<​T,​bool>​ question) { 
 +        List<​T>​ list = new List<​T>​();​ 
 +        foreach (T element in source) 
 +            if (question(element)) 
 +                list.Add(element);​ 
 +        return list; 
 +    } 
 +
 +</​code>​ 
 +Devuelve una nueva lista con los elementos de la lista sobre la que sea llamado que en el parámetro question (que puede ser una expresión lambda) devuelvan true: 
 +<code csharp>​ 
 +List<​Person>​ myList = lPerson.myWhere(p => p.age < 30); 
 +</​code>​
 === Expression Trees === === Expression Trees ===
  
-==== LINQ ==== 
-LINQ da de forma nativa expresiones para describir operanciones sobre datos que no han sido modelados de forma orientada a objetos (por ejemplo, crear expresiones que busquen en un array de elementos ubicado en memoria) a partir de cierto patrón. También puede ser extensible a otros campos (including LINQ to SQL, LINQ to Dataset, LINQ to Entities, LINQ to XML, o LINQ to Objects) siempre y cuando los elementos que se buscan extienden ''​IEnumerable''​. 
  
 +
 +
 +
 +==== LINQ ====
 +LINQ da de forma nativa expresiones para describir operanciones sobre datos que no han sido modelados de forma orientada a objetos (por ejemplo, crear expresiones que busquen en un array de elementos ubicado en memoria) a partir de cierto patrón. También puede ser extensible a otros campos (including LINQ to SQL (DLINQ), LINQ to Dataset, LINQ to Entities, LINQ to XML (XLINQ), o LINQ to Objects) siempre y cuando los elementos se encuentren una clase que extienda ''​IEnumerable''​. \\ \\ 
 +  * [[fw:​othersnet:​linq|Apartado general sobre LINQ]].
 +  * [[fw:​othersnet:​dlinq|Apartado general sobre DLINQ (LINQ to SQL)]].
  
highlevel/chsarp/versions.1237379853.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)