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#.