Abrufen des Eigenschaftswerts mithilfe von Reflektion in C#

Aimen Fatima 12 Oktober 2023
  1. die System.Reflection in C#
  2. Holen Sie sich den Wert der Eigenschaft mithilfe von Reflektion in C#
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.