ça pour le coup par contre c'est une des solutions parmi les moins efficaces
La rélexion ça fonctionne avec le type object donc boxing obligatoire pour les types valeurs (donc allocation de mémoire à chaque appel), plus recherche des membres pas très rapides. La méthode des delegate est clairement plus efficace. Celà étant dit si tu utilises des propriétés comme je l'ai suggéré plus haut (sachant que les propriétés auto-générées existent avec C# 3.0, pas besoin de taper le code du get et du set si tu n'en as pas envie) tu peux t'en tirer à bien meilleur compte: (reste peut être des erreurs de syntaxe)
sealed class Modifier<T>
{
delegate T GetTDelegate();
delegate void SetTDelegate(T value);
GetTDelegate get;
SetTDelegate set;
public Modifier(object obj, PropertyInfo property)
{
if (!(property.CanRead && property.CanWrite))
throw new InvalidOperationException();
get = (GetTDelegate)Delegate.CreateDelegate(typeof(GetTDelegate), obj, property.GetGetMethod());
set = (SetTDelegate)Delegate.CreateDelegate(typeof(GetTDelegate), obj, property.GetSetMethod());
}
public T Get()
{
return get();
}
public void Set(T value)
{
set(value);
}
}
Le niveau au dessus étant les méthodes dynamiques et là tu peux t'en tirer avec des champs directement (c'est mon approche préférée mais un peu plus complexe à mettre en place, et un peu moins efficace point de vue mémoire)