Announcement

Collapse
No announcement yet.

Objekte während der laufzeit dynamisch erzeugen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Objekte während der laufzeit dynamisch erzeugen

    Hi @ all,

    ich nutze .net compact framework 3.5 .. in der 4er version gibts ja das dynamicobject.. gibt es für das .net 3.5 ein workaround ?

    also z.b.

    string class = "MyClass";
    string attr1 = "FirstName"
    string attr2 = "LastName"

    .. am ende will ich MyClass instanziieren und auch die attribute setzen können.. gibts da möglichkeiten das umzusetzen?
    Zuletzt editiert von Daniel.Sander; 17.02.2011, 08:28.

  • #2
    Wo wäre denn der Nutzen dafür? Dafür kannst Du auch einfach ein Dictionary benutzen. Der einzige Sinn Klassen zu erstellen ist, dass man beim Kompilieren schon Typsicherheit hat. Verlagere ich das zur Laufzeit kann ich auch gleich

    Dictionary<String,Dictionary<String,Object>> // 1. String ist Name des Objects, 2. String Name der Eigenschaft/Methode/Feld, 3. Object ist der Wert der Eigenschaft/Methode/Feld

    nehmen und an den gewünschten Stellen hoffentlich richtig casten.

    dynamic macht in C# wirklich nur in sehr wenigen Fällen wirklich Sinn z.B. in Kombination mit dynamischen Sprachen. Alles andere sollte man anders erledigen.

    Comment


    • #3
      ahh danke für den tip , auf die variante mit dem dictionary hätte man kommen können^^.. zum hintergrund.. ich hab ein tabcontrol und ne factory die mir die tabs dafür produziert.. aus den für die tabs genutzten controls(textboxen, checkboxen..) erstell ich mir dann tabellen für die datenbank.. aus den attributen der tabelle sollten dann die objekte erstellt werden..

      jo dann vielen dank nochmal

      Comment


      • #4
        Ich würde trotzdem Objekte dafür bauen. Das ist nicht wirklich schwierig und man hat mehr Beschreibung als bei einem Dictionary. Ich würde sogar behaupten, dass 90% aller Dictionaries einfach falsch sind

        Comment


        • #5
          hmm naja ich will das ganze ja bisl dynamisch halten deswegen kann ich eigentlich keine Objekte bauen. Oder versteh ich dich jetzt falsch?

          Comment


          • #6
            na pass auf... ich nehme jetzt mal ein Beispiel mit mit Fenstern.

            Du kannst dem User das vorwerfen:

            Dictionary<String,Dictionary<String,Control>>

            So... klar weiss der Erfinder was da drin war, aber ich würde sagen nach einem Jahr weiss nicht mal mehr der was in dem Dictionary drin ist.

            Baue ich aber sowas:

            [highlight=c#]
            public class UserGeneratedWindow
            {
            public String WindowName { get; set; }
            public IList<WindowPart> { get; }
            }

            public class WindowPart
            {
            public String PartName { get; set; }
            public Control PartControl { get; set; }
            }

            ...

            IList<UserGeneratedWindow> windows = GetUserGeneratedWindowsFromDb();
            [/highlight]

            Das ist im Endeffekt das gleiche wie das Dictionary oben, allerdings kann sich der Benutzer der Datenstruktur viel eher vorstellen wofür die einzelnen Properties gedacht sind. Ich sehe sofort dass es sich um Windows handelt die einen Namen haben, und diese wiederum bestehen aus Parts (einzelne Teile des Fensters) welche einen Namen (z.B. Titel) und ein Control haben.

            Ich denke Du siehst worauf ich hinaus will Funktionieren tun beide aber lesen lässt sich meine Version (zumindest in meinen Augen viel besser). Deswegen wage ich auch zu behaupten dass für 90% der Anwendungsfälle Dictionary schlicht und ergreifend nicht das richtige ist.
            Zumal man bei meiner Version auch schöner mit LINQ arbeiten kann. Dictionary finde ich an der Stelle immer etwas hoprig (Stichwort: KeyValuePair)

            Comment


            • #7
              alles klar jetzt verstehe ich wie du das gemeint hast.. ich stimme dir zu das deine 2. variante besser lesbar ist, zumal der code weiter entwickelt werden soll ^^

              .. dann bedank ich mich für deine schnelle Hilfe .. thx ^^

              Comment

              Working...
              X