M
NullBockException schrieb:
Ja das Konzept ist echt nicht gut, aber vll. Hift dir "PropertyInfo" und "SetValue" weiter, Stichwork Refelctions:
Hier para Beispiel und Test Klassen:
class MyClass
{
double _val = default(double);
public double MyProperty
{
get { return _val; }
set { _val = value; }
}
}
static class PropertySetter
{
public static void ManipulateProperty(
PropertyInfo prop,
object dest,
double val)
{
prop.SetValue(dest, val, null);
}
}
Geht das hier auch einfacher? Warum eine statische Klasse anlegen? Die Instanz von Type kann doch auch direkt in der Klasse mit den Eigenschaften in eine Methode eingesetzt weren, oder? Dann kann man doch bestimmt auch in der Methode die PropertyInfo, d.h. die übergebene Eigenschaft manipulieren, evtl. auch von irgendwelchen Abhängigkeiten die noch abgefragt werden. Habe das probiert. Leider kann ich die Eigenschaft die ich in der Methode als Argument (string property) übergebe nicht verändern. ==> pi.SetValue setzt bei der Eigenschaft keinen neuen Wert. Was mache ich falsch, oder gibts da eine andere Sache wie ich die Property manipulieren kann?
und hier das Property setzen:
Type tp = typeof(MyClass);
PropertyInfo pi= tp.GetProperty("MyProperty");
MyClass test = new MyClass();
PropertySetter.ManipulateProperty(pi, test, 5);
Man Müßte von deinem Vorschlag so etwas machen können:
blic class ClassDatenprüfung
{
private double werkzeugdurchmesser;
private double messtiefe;
double zahl = 100.0;
public double Werkzeugdurchmesser
{
get { return werkzeugdurchmesser; }
set { werkzeugdurchmesser = value;}
}
public double Messtiefe
{
get { return messtiefe; }
set { messtiefe = value;}
}
/*
Methode für die Übergabe der Eingabe in die TextBox in der Eingabemaske.
Hier soll geprüft werden, ob die Eingabe für die BErechnung auch
tatsächlich erforderlich ist. Das muss für jede Eigenschaft der Klasse passieren. Leider habe ic hin meiner Klasse 30 Eigenschaften, und diese möchte ich dann in der MEthode als Argument übergeben.
*/
/// <summary>
/// Übergabe des Textboxinhaltes an die Klassenigenschaft.
/// </summary>
/// <param name="?">Platzhalter für die Porperty (Eigenschaft) der Klasse</param>
/// <param name="tbx">Inhalt der Textbox die übergeben werden soll.</param>
/// <param name="pflichteingabe">if set to <c>true</c> [pflichteingabe].</param>
/// <remarks> Mit der boolschen Variable "pflichteingabe" wird geprüft, ob die textbox eine optionale Eingabe oder ein Pflichteingabefeld ist</remarks>
private void ÜbergabeEigenschaft(string property, double x, bool pflichteingabe)
{
Type tp = new Type(ClassDatenprüfung);
PropertyInfo pi = tp.GetValue("property");
EigenschaftVerändern(pi); ???
}
}
Aber ich galueb nu auch zu verstehen, daßman mit dieser .SetValue() den tatsaächlichen WErt der Eigenschaft nicht verändern kann, sondern den an eine andere Variable oder ein Objekt übergibt. Ist das korrekt?