Vous pouvez utiliser la réflexion, vous pouvez obtenir un objet MethodInfo pour les accesseurs get/set et appeler sa méthode Invoke.
L'exemple de code suppose que vous avez à la fois la manipulation d'un accesseurs get et set et vous avez vraiment ajouter erreur si vous voulez utiliser dans le code de production:
Par exemple, pour obtenir la valeur de la propriété Foo d'objet obj vous pouvez écrire:
value = obj.GetType().GetProperty("Foo").GetAccessors()[0].Invoke(obj,null);
pour le définir:..
obj.GetType().GetProperty("Foo").GetAccessors()[1].Invoke(obj,new object[]{value});
vous pouvez donc passer obj.GetType() GetProperty ("Foo") GetAccessors() [0] à votre méthode et exécute sa méthode Invoke.
un moyen plus facile est d'utiliser des méthodes anonymes (cela fonctionnera dans .net 2.0 ou version ultérieure), nous allons utiliser une version légèrement modifiée de votre exemple de code:
delegate RET FunctionDelegate<T, RET>(T t);
void func<T, RET>(FunctionDelegate<T,RET> function, T param, ...)
{
...
return function(param);
}
pour une propriété nommée Foo de type int qui fait partie d'un SomeClass de classe:
SomeClass obj = new SomeClass();
func<SomeClass,int>(delegate(SomeClass o){return o.Foo;},obj);
C'est une très bonne idée selon le principe KISS. Malheureusement, à ce stade, je ne peux pas l'utiliser :( Le problème est que la propriété que j'utilise ne fait pas partie de mon code Et l'écriture d'un wrapper ajoute des frais généraux je ne veux pas à ce stade –