Obtenga el valor de la propiedad usando Reflection en C#

Aimen Fatima 12 octubre 2023
  1. el System.Reflection en C#
  2. Obtener el Valor de la Propiedad Usando Reflection en C#
Obtenga el valor de la propiedad usando Reflection en C#

Este artículo elabora el uso del espacio de nombres System.Reflection en C#. Usando el espacio de nombres Reflection, veremos un proyecto de muestra para obtener los valores de propiedad.

el System.Reflection en C#

El espacio de nombres System.Reflection en C# se usa para obtener información sobre los parámetros, ensamblajes, métodos, módulos y otros elementos del código. Puede obtener cualquier tipo de clase, valores de parámetros, métodos, etc., importando este espacio de nombres a su programa.

Demostraremos la técnica para obtener el valor de propiedad de un objeto utilizando las funcionalidades System.Reflection.

Obtener el Valor de la Propiedad Usando Reflection en C#

Cree un proyecto de C# en Visual Studio. En primer lugar, importe el espacio de nombres Reflection a su programa.

using System.Reflection;

El espacio de nombres Sistema contiene una clase Tipo que devuelve el tipo de objeto.

Type type = _obj.GetType();

El espacio de nombres Reflection contiene una clase llamada PropertyInfo para obtener las propiedades de un tipo. La clase Type tiene un método GetProperty() y GetProperties() para devolver una propiedad y una matriz de propiedades de una clase, respectivamente.

PropertyInfo[] properties = type.GetProperties();

La clase PropertyInfo contiene un atributo miembro y un método llamado Name y GetValue() para devolver el nombre de la propiedad y el valor asignado a ella, respectivamente.

Console.WriteLine(p.Name + " : " + p.GetValue(_obj));

A continuación se muestra el fragmento de código completo del proyecto de ejemplo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

namespace GettingPropertyValue {
  public class Book {
    private String bookTitle;
    private int numberOfPages;

    public Book(String title, int pages) {
      bookTitle = title;
      numberOfPages = pages;
    }

    public String Title {
      get { return bookTitle; }
    }

    public int Pages {
      get { return numberOfPages; }
      set { numberOfPages = value; }
    }
  }

  public class MyGetValue {
    public static void Main() {
      Console.WriteLine("Getting all properties...");
      Book book = new Book("Get Property Value in C#", 198);
      GetPropertyValues(book);

      Console.WriteLine("\n\nGetting value of a single property...");
      GetPropertyValue(book, "Pages");
      Console.ReadKey();
    }

    private static void GetPropertyValues(Object _obj) {
      // returns the type of _obj
      Type type = _obj.GetType();
      Console.WriteLine("Type of Object is: " + type.Name);

      // create an array of properties
      PropertyInfo[] properties = type.GetProperties();
      Console.WriteLine("Properties (Count = " + properties.Length + "):");

      // print each property name and value
      foreach (var p in properties)
        if (p.GetIndexParameters().Length == 0)
          Console.WriteLine(p.Name + "(" + p.PropertyType.Name + ") : " + p.GetValue(_obj));
        else
          Console.WriteLine("   {0} ({1}): <Indexed>", p.Name, p.PropertyType.Name);
    }

    // method to get a single property value from a string
    private static void GetPropertyValue(Object _obj, string property) {
      // prints property name
      Console.WriteLine("Property : " + _obj.GetType().GetProperty(property).Name);

      // prints property value
      Console.WriteLine("Value : " + _obj.GetType().GetProperty(property).GetValue(_obj));
    }
  }

}

Hemos creado una clase llamada Libro con dos propiedades (título y número de páginas). Creamos dos métodos (es decir, GetPropertyValue y GetPropertyValues) en otra clase, MyGetValue.

El GetProjectValue(Object _obj, string property) toma un objeto y una cadena o propiedad como parámetros e imprime el nombre y el valor de la propiedad como salida.

Por otro lado, el método GetPropertyValues(Object _obj) toma un objeto como parámetro. Primero determina el tipo de objeto y obtiene todas las propiedades junto con los valores de ese objeto.

La salida del fragmento de código es la siguiente:

Getting all properties...
Type of Object is: Book
Properties (Count = 2):
Title(String) : Get Property Value in C#
Pages(Int32) : 198

Getting value of a single property...
Property : Pages
Value : 198

Los geeks pueden visitar System.Reflection C# para obtener una referencia detallada de Reflections en C#.