Qu'est-ce que la programmation réflexive exactement

Mar 27 2023
Beaucoup de gens diraient que les implémentations tirant parti de Reflection seraient lentes, cela est vrai par rapport à l'exécution de code statique de l'implémentation équivalente, cependant Reflection est utilisé dans de nombreux langages et frameworks, tout comme le. .
Photo de Jeremy Vessey sur Unsplash

Beaucoup de gens diraient que les implémentations tirant parti de Reflection seraient lentes, cela est vrai par rapport à l'exécution de code statique de l'implémentation équivalente, cependant Reflection est utilisé dans de nombreux langages et frameworks, tout comme le. .NET framework, et à condition qu'il ne soit pas abusé, il peut être un outil très puissant dans la boîte à outils.

La réflexion peut permettre à un utilisateur de créer des chemins de flux de contrôle inattendus via une application, contournant potentiellement les mesures de sécurité. Cela peut être exploité par des attaquants. Les vulnérabilités historiques de Java causées par une réflexion non sécurisée ont permis au code extrait de machines distantes potentiellement non fiables de sortir du mécanisme de sécurité du bac à sable Java. Une étude à grande échelle de 120 vulnérabilités Java en 2013 a conclu que la réflexion non sécurisée est la vulnérabilité la plus courante en Java, mais pas la plus exploitée. - Wikipédia

Aperçu pratique

Voici un exemple de la façon dont vous pouvez appliquer les connaissances de la programmation réflexive pour atteindre le dynamisme :

Vous trouverez ci-dessous une méthode d'extension qui extrait chaque propriété de type chaîne et ajoute les noms et les valeurs des propriétés à une liste.

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;
	}
}

Vous pouvez en savoir plus sur les réflexions en C # à partir de

Résultat

Conclusion

La réflexion est une technique de programmation qui donne au code des capacités d'introspection. L'utilisation efficace de la réflexion vous permet d'écrire des systèmes plus dynamiques et de bénéficier d'une automatisation accrue.