Sie können Reflection verwenden, Sie können ein MethodInfo-Objekt für die get/set-Zugriffsmethoden abrufen und es als Invoke-Methode aufrufen.
Das Codebeispiel vorausgesetzt, dass Sie beide haben eine Get- und Set-Zugriffs- und Sie wirklich hinzuzufügen, haben die Fehlerbehandlung, wenn Sie dies im Produktionscode verwenden möchten:
Zum Beispiel den Wert der Eigenschaft Foo des Objekts obj zu erhalten Sie können schreiben:
value = obj.GetType().GetProperty("Foo").GetAccessors()[0].Invoke(obj,null);
es setzen:..
obj.GetType().GetProperty("Foo").GetAccessors()[1].Invoke(obj,new object[]{value});
So können Sie obj.GetType() GetProperty ("Foo") GetAccessors() [0], um Ihre Methode übergeben und Führen Sie die Invoke-Methode aus.
ein einfacher Weg ist anonyme Methoden zu verwenden (dies in .net 2.0 oder höher arbeiten), lassen Sie sich eine leicht modifizierte Version des Codes verwenden, zB:
delegate RET FunctionDelegate<T, RET>(T t);
void func<T, RET>(FunctionDelegate<T,RET> function, T param, ...)
{
...
return function(param);
}
für eine Eigenschaft mit dem Namen Foo vom Typ int das ist Teil einer Klasse Someclass:
SomeClass obj = new SomeClass();
func<SomeClass,int>(delegate(SomeClass o){return o.Foo;},obj);
Das ist eine sehr gute Idee, auf dem KISS-Prinzip ist. Leider kann ich es an dieser Stelle nicht verwenden :( Das Problem ist, dass die Eigenschaft, die ich verwende, nicht Teil meines Codes ist. Und das Schreiben eines Wrappers fügt einen Overhead hinzu, den ich an dieser Stelle nicht möchte –