Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
highlevel:chsarp:versions [2009/03/18 12:50] alfred |
highlevel:chsarp:versions [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 208: | Línea 208: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| Línea 236: | Línea 237: | ||
| <code csharp> | <code csharp> | ||
| var variable; | 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> | </code> | ||
| Línea 285: | 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)]]. | ||