Was genau ist Reflective Programming

Mar 27 2023
Viele Leute würden argumentieren, dass Implementierungen, die Reflection nutzen, langsam wären, dies gilt im Vergleich zur statischen Codeausführung der äquivalenten Implementierung, jedoch wird Reflection in vielen Sprachen und Frameworks verwendet, genau wie die. .
Foto von Jeremy Vessey auf Unsplash

Viele Leute würden argumentieren, dass Implementierungen, die Reflection nutzen, langsam wären, dies gilt im Vergleich zur statischen Codeausführung der äquivalenten Implementierung, jedoch wird Reflection in vielen Sprachen und Frameworks verwendet, genau wie die. .NET-Framework, und vorausgesetzt, dass es nicht missbraucht wird, kann es ein sehr mächtiges Werkzeug im Toolkit sein.

Reflection kann es einem Benutzer ermöglichen, unerwartete Steuerflusspfade durch eine Anwendung zu erstellen, wodurch möglicherweise Sicherheitsmaßnahmen umgangen werden. Dies kann von Angreifern ausgenutzt werden. Historische Schwachstellen in Java, die durch unsichere Reflektion verursacht wurden, ermöglichten Code, der von potenziell nicht vertrauenswürdigen Remote-Computern abgerufen wurde, den Sicherheitsmechanismus der Java-Sandbox zu durchbrechen. Eine groß angelegte Studie über 120 Java-Schwachstellen im Jahr 2013 kam zu dem Schluss, dass unsichere Reflektion die häufigste Schwachstelle in Java ist, wenn auch nicht die am häufigsten ausgenutzte. — Wikipedia

Praktischer Einblick

Hier ist ein Beispiel, wie Sie das Wissen des Reflective Programming anwenden können, um Dynamik zu erreichen:

Nachfolgend finden Sie eine Erweiterungsmethode, die jede Eigenschaft vom Typ Zeichenfolge extrahiert und die Eigenschaftsnamen und -werte zu einer Liste hinzufügt.

using System;
using System.Collections.Generic;
using System.Reflection;
					
public class Program
{
	public static void Main()
	{
		var testObj = new {
            FirstName = "Kelechi",
		  IsVerified = true,
		  Age = 21,
		  Motto = "F around and find out",
		};
		var test = testObj.GetStringProps();
		test.ForEach(Console.WriteLine);
	}
}

public static class MyExtensions{
    public static List<string> GetStringProps(this object myObject){
      List<string> myList = new List<string>();
      PropertyInfo[] props = myObject.GetType().GetProperties();
	  foreach(var prop in props){
             var propValue = prop.GetValue(myObject);
             if(propValue.GetType().Equals(typeof(string))){
                myList.Add($"{prop.Name}|{propValue}");
	     }
	  }
	  return myList;
	}
}

Weitere Informationen zu Reflexionen in C# finden Sie unter

Ergebnis

Abschluss

Reflexion ist eine Programmiertechnik, die Code introspektive Fähigkeiten verleiht. Durch den effektiven Einsatz von Reflektion können Sie dynamischere Systeme schreiben und von einer erhöhten Automatisierung profitieren.