Announcement

Collapse
No announcement yet.

Argumente an Methode übergeben

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

  • #16
    Hallo,

    die Methoden Frequenz und ReferenzTakt könnten auch ein double Ergebnis liefern. D.h die Umwandlung vom String (falls die WMI einen String zurückgibt, weiß ich jetz nicht) zu Double in den Methoden - ist noch sauberer.

    mfG Gü

    PS: Der Code kann mit [highlight=vb.net]Code....[/highlight] besser dargestellt werden.
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #17
      Die Methoden geben ein Object zurück, ich muss das in einen string konvertieren, weil ich nur die Möglichkeit .ToString() habe.
      Was ich sonst machen könnte wäre, das queryObj mit ToString erst in einen string zu wandeln und dann in der return Zeile in einen Double zu parsen, damit die Methode dann einen double zurück geben. Meinst Du so in etwa? Wobei eigentlich ist doch egal in welcher Methode ich parse, oder?

      Aber mal was anderes, was mir heut auf Arbeit so eingefallen ist. Ich hab ja die beiden Werte der Methoden Frequenz und ReferenzTakt momentan nicht in einem Feld gespeichert. Das bedeudet ja dann, dass die Methode Multiplikator, nicht einfach die Werte nimmt und damit rechnet, sonder die beiden Methoden erneut ausführt. Ist das richtig so? Dann wäre es doch besser, Felder zu verwenden dafür (mal abgesehen von den schon erwähnten Eigenschaften, damit kenn ich mich aber noch nicht aus...).

      Comment


      • #18
        Zum ersten Teil:
        Wenn sie ein Objekt zurückgeben kann ein doulbe-Wert einfach über Unboxing geholt werden. Das geht zB so
        Code:
        double d = (double)queryObj["<Abfrage>"];
        Grafisch Dargestellt ist Unboxing:

        (Copyright by Microsoft, aus der MSDN)

        Zum zweiten Teil:
        Ich hab erlich gesagt den Überblick über die Varianten verloren - ich hab ja selbst auch Projekte.
        Beschreib nochmal was du willst. Dann werde ich mir einen Mustervorschlag überlegen.

        mfG Gü
        Attached Files
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #19
          Ok, kein Problem. Ich hab zwei Methoden, "Frequenz" und "ReferenzTakt", die mir zum einen die aktuelle Geschwindigkeit und zum anderen den HT ReferenzTakt liefern und diese Werte sollen auch in einer Textbox einzeln anzeigbar sein. In einer dritten Methode möchte ich den Multiplikator der CPU errechnen, also quasi die Frequenz durch den Referenztakt teilen. Um das zu tun, deklariert die Methode "Multiplikator" zwei Variablen, die mit

          double freq = Double.Parse(Frequenz());

          und

          double teiler = Double.Parse(ReferenzTakt());

          die Werte ermittelt. In dem ich das so mache, werden doch aber die Methoden "Frequenz" und "ReferenzTakt" aufgerufen und erneut ausgeführt, oder?

          Deswegen hab ich überlegt, wenn die Methoden, die zuerst ausgeführt werden, das Ergebnis in Felder speichern, ist der Wert für die nachfolgende Methode verfügbar...
          Zuletzt editiert von brown78; 10.10.2008, 00:23.

          Comment


          • #20
            Hi,

            erstelle eine Klasse CPU. In der werden die Werte per WMI (oder sonst wie) abgefragt und als Get-Methoden implentiert.

            CPU
            [highlight=c#]
            using System;

            namespace WindowsFormsApplication1
            {
            public static class CPU
            {
            public static double GetFrequenz()
            {
            object o = 1234; // WMI-Query:
            return Convert.ToDouble(o);
            }

            public static double GetReferenzTakt()
            {
            object o = 4567; // WMI-Query:
            return Convert.ToDouble(o);
            }

            public static double GetMultiplikator()
            {
            return GetFrequenz() / GetReferenzTakt();
            }
            }
            }
            [/highlight]

            Verwendung im Formular:
            [highlight=c#]
            using System;
            using System.Windows.Forms;

            namespace WindowsFormsApplication1
            {
            public partial class Form1 : Form
            {
            public Form1()
            {
            InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
            textBox1.Text = CPU.GetFrequenz().ToString();
            textBox2.Text = CPU.GetReferenzTakt().ToString();
            textBox3.Text = CPU.GetMultiplikator().ToString();
            }
            }
            }
            [/highlight]

            Ist glaube ich am einfachsten.

            Übrigens die Methoden der Klasse CPU sowie die Klasse selbst ist als static deklariert da
            • nur die Werte der einzigen oder der 1. CPU im System verwendet werden
            • die Werte nicht von der Instanz abhängig sind


            Da die WMI-Abfragen lange dauern können die Ergebnisse in der Klasse wo sie verwendet werden als Felder zwischengespeichert werden.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #21
              Ok, also doch static... hatte ich ja am Anfang auch so...

              Genau deswegen meinte ich ja, ob es nicht sinnvoler ist die 2 Werte in Feldern zu speichern, damit nicht beim berechnen, die Methoden erneut ausgeführt werden müssen.

              Übrigens, hat das mit dem unboxing von object in double nicht funktioniert, ich hab es aber mit der ConvertTo Methode gelöst wie in Deinem Beispiel obern...

              Wo liegt der Unterschied, ob ich meine Methode "Frequenz" oder "GetFrequenz" nenne?

              Bestens, jetzt wird der Multiplikator viel schneller errechnet...
              Zuletzt editiert von brown78; 10.10.2008, 01:14.

              Comment


              • #22
                Wo liegt der Unterschied, ob ich meine Methode "Frequenz" oder "GetFrequenz" nenne?
                Fürs Programm ist wurscht wie die Methoden heißen.

                Ich habe deshalb Get... gewählt weil es bei Eigenschaften immer eine Get- und Set-Methode gibt. Der Wert kann nicht gesetz werden -> also wäre es eine schreibgeschütze Eigenschaft.

                Ich folge der Konvention dass Eigenschaften nur Werte setzen/zurückgeben (bei schreibgeschützt nur zurückgeben). Hier wird aber eine etwas aufwändigere Operation, die WMI-Abfrage, durchgeführt und deshalb ist es eine Methode. Wie bereits erwähnt die Bezeichnung mit Get... in Anlehnung an die Eigenschaften.

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #23
                  Ah ok... Hab mich schon gewundert....
                  Jedenfalls klappt jetzt alles so wie ich es möchte. Aber irgendwie hab ich des Gefühl wenn ich mich nicht davon abbringen lassen hätte, meine Klasse und Methoden als "static" zu definieren, wären wir schneller am Ziel gewesen :-)...
                  Egal, gelernt hab ich auf jeden Fall wiedermal etwas!

                  Eigentlich müsste ich Dir schon fast mein Projekt mal schicken, so viel wie von Dir schon "drin" ist ;-)

                  Comment


                  • #24
                    • wenn dann bitte mit der Post
                    • trink lieber mal ein Bier auf mich


                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #25
                      Hehe, hab ich mir auch schon gedacht, Prost!

                      Comment

                      Working...
                      X