Abrufen des Eigenschaftswerts mithilfe von Reflektion in C#
Dieser Artikel erläutert die Verwendung des Namespace System.Reflection
in C#. Unter Verwendung des Namensraums Reflection
werden wir uns ein Beispielprojekt ansehen, um die Eigenschaftswerte zu erhalten.
die System.Reflection
in C#
Der Namespace System.Reflection
in C# wird verwendet, um Informationen über die Parameter, Assemblys, Methoden, Module und andere Elemente des Codes zu erhalten. Sie können jeden Klassentyp, Parameterwerte, Methoden usw. erhalten, indem Sie diesen Namensraum in Ihr Programm importieren.
Wir werden die Technik demonstrieren, um den Eigenschaftswert eines Objekts unter Verwendung der System.Reflection
-Funktionalitäten zu erhalten.
Holen Sie sich den Wert der Eigenschaft mithilfe von Reflektion in C#
Erstellen Sie ein C#-Projekt in Visual Studio. Importieren Sie zunächst den Namensraum Reflection
in Ihr Programm.
using System.Reflection;
Der Namespace System
enthält eine Klasse Type
, die den Objekttyp zurückgibt.
Type type = _obj.GetType();
Der Namespace Reflection
enthält eine Klasse namens PropertyInfo
, um die Eigenschaften eines Typs abzurufen. Die Klasse Type
hat eine Methode GetProperty()
und GetProperties()
, um eine Eigenschaft bzw. ein Array von Eigenschaften einer Klasse zurückzugeben.
PropertyInfo[] properties = type.GetProperties();
Die Klasse PropertyInfo
enthält ein Mitgliedsattribut und eine Methode namens Name
und GetValue()
, um den Namen der Eigenschaft bzw. den ihr zugewiesenen Wert zurückzugeben.
Console.WriteLine(p.Name + " : " + p.GetValue(_obj));
Es folgt das vollständige Code-Snippet des Beispielprojekts:
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));
}
}
}
Wir haben eine Klasse namens Buch
mit zwei Eigenschaften (Titel und Seitenzahl) erstellt. Wir haben zwei Methoden (d. h. GetPropertyValue
und GetPropertyValues
) in einer anderen Klasse, MyGetValue
, erstellt.
Der GetProjectValue(Object _obj, string property)
nimmt ein Objekt und einen String oder eine Eigenschaft als Parameter und gibt den Eigenschaftsnamen und -wert als Ausgabe aus.
Andererseits nimmt die Methode GetPropertyValues(Object _obj)
ein Objekt als Parameter. Es bestimmt zuerst den Typ des Objekts und ruft alle Eigenschaften zusammen mit den Werten dieses Objekts ab.
Die Ausgabe des Code-Snippets sieht wie folgt aus:
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
Geeks können System.Reflection
C# besuchen, um eine ausführliche Referenz zu den Reflections in C# zu erhalten.