Nuestro objetivo es ampliar los métodos que tiene una clase del lenguaje .NET #C, para ello, vamos a utilizar las extensiones de clases (ampliación de clases), también llamadas «Extensions Class». Esta técnica es muy utilizada ya que podemos otorgarle a cualquier clase nuevos métodos de los que vamos a poder dar acceso a utilizar en todo nuestro proyecto a posteriori.

También os voy a mostrar como pasar un objeto a una cadena, y viceversa, independientemente del tipo de clase del objeto. Lo llevare a cabo transformando el objeto a formato XML.

Iniciación

Para empezar necesitaremos un proyecto .NET #C. El programa que voy a utilizar para realizarlo es Visual Studio 2019. He escogido el siguiente:

1

Y escogeremos la opción que mas no convenga según el proyecto que realicemos. Yo voy a escoger el siguiente para la explicación:

2

Una vez tenemos ya nuestro proyecto creado voy a explicar las extensiones de clases.

Creación de una «Extension Class»

Para ello, nos crearemos una carpeta en nuestro proyecto llamada «Extensions».

3

Una vez la tenemos, crearemos una clase en referencia a la clase que queremos hacer su extensión. El formato que debemos aplicar para tener claro a que clase la estamos referenciando es: «Nombre de la clase» + «Extension». En este caso voy a hacer una extensión de la clase «TempData», que es una clase dedicada a pasar información entre los controladores.

4

Es muy importante que indiquemos que nuestra clase es estática.

6

Extensión de «TempData» para la utilización de objetos (XML – String)

Voy a realizar una extensión a la clase «TempData» para que pueda almacenar objetos enteros, debido que por defecto solo puede guardar cadenas. Lo llevare a cabo convirtiendo los objetos a formato «XML» para posteriormente pueda almacenarlos el «TempData» como si fuera una cadena y viceversa, es decir, poder recuperar el objeto del «TempData» con su formato de origen.

Para poder transformar los objetos a «XML» voy a utilizar el NuGet siguiente:

5

Voy a realizar dos metodos estaticos:

  • El primero llevara a cabo la funcion de convertir el Objeto a «XML» con la ayuda de las clases «XMLSerializer», que debemos indicarle cuando lo instanciamos que tipo de clase debe llevar a cabo la serialización, y «StringWriter» que es la clase que ayudara a «XMLSerializer» a serializar el objeto a cadena («String»). Y por último, lo guardara en el «TempData» que le indiquemos.
7
  • El segundo recogerá la cadena del «TempData» indicado. Dicha cadena esta en formato «XML», mediante nuestro objeto de la clase «XmlSerializer» con el tipo de clase debe llevar a cabo la deserialización, y con nuestro objeto de la clase «StringReader», obtendremos nuestro objeto de la clase deseada al deserializar la cadena.
8

Una vez realizados todos los pasos anteriores ya habríamos realizado nuestra extensión de la clase. Solo nos quedaría llamarla.

9

Nos muestra un error. Este se muestra debido a que no tenemos importada nuestra clase de extensión. Una vez realicemos el «using» necesario, el error desaparecerá.

10
11
12

Os voy a adjuntar otro ejemplo de extensión, en este caso sera con la clase «DateTime». Realizo un método que nos devolvera una cadena de la fecha que posee el objeto con el formato personalizado que se le indica en el método.

13

Lo voy a llamar en la vista que muestro el objeto «Persona» que he realizado en anterior ejemplo.

14

Importante para que nos reconozca las extensiones en las vistas, que hagamos el «using» en «_ViewImports.cshtml».

15

Esto es lo que nos muestra la página una vez realizado todo el proceso.

16

Autor: Carlos Campayo Serrano

Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma

Centro: Tajamar

Año académico: 2020-2021

Código / recursos utilizados / Otros datos de interés: https://github.com/CarlosCampayo/ProyectoExtensions.git

LinkedIn: www.linkedin.com/in/carlos-campayo-8712121a8

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.