Announcement

Collapse
No announcement yet.

reference auf object einer anderen klasse

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

  • reference auf object einer anderen klasse

    ich habe in meinem project 3 klassen eine form eine Admin und eine worker

    in der form erzeuge ich mir ein object der worker welche properties
    beinhaltet und ich erzeuge mir ein object der admin und und übergebe im
    Konstruktor das workerobject " = new Admin(Wo)" danach starte ich nach einem
    buttondruck die admin mit ShowDialog().
    in der admin sieht meinkonstruktor so aus

    private Worker work;
    public Admin(object wo)
    {
    this.work = (Worker)wo;
    }

    private void XYZ()
    {
    this.work.MAIL_SENDER = this.TXT_MAIL_SENDER.Text;

    //MAIL_SENDER ist ein Propertie in der Workerklasse.
    }

    nach beendigung der adminklasse ist aber der wert in der workerklasse immer
    noch der alte und nicht der den ich aus der adminklasse aus der TextBox
    gelesen habe.
    ich hoffe das ich für eine so grunlegende sache nicht gesteinigt werde aber
    wie kann ich das propertie aus der workerklasse mit dem neuen wert
    belegen???????

    vielen dank

    der dica

  • #2
    Hallo,

    das folgende Beispiel zeigt die Übergabe eines Objekts per Referenz, wobei <b>ref</b> festlegt, dass das Objekt in jedem Fall über einen "Zeiger" angesprochen wird. Außerdem verzichtet mein Beispiel auf den generischen Object-Type und geht somit dem Risiko aus dem Weg, sich aus Versehen durch den Typcast mit einer Value-Kopie selbst in den Fuß zu schießen :-)
    <pre>
    <pre> class OSWorker
    {
    public string sData;
    }

    class OSAdmin
    {
    private OSWorker aObj;
    public OSAdmin(<b><font color="#FF0000">ref</font></b> OSWorker aParamByReference)
    {
    this.aObj = aParamByReference;
    }
    public void DoWork()
    {
    this.aObj.sData = "OSAdmin-Ergebnis";
    }
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
    OSWorker aTestWorker = new OSWorker();
    OSAdmin aTestAdmin = new OSAdmin(<b><font color="#FF0000">ref</font></b> aTestWorker);
    aTestAdmin.DoWork();
    MessageBox.Show(aTestWorker.sData);
    }
    }
    </pre>

    P.S: Mein Beispiel funktioniert auch dann, wenn ref weggelassen wird.

    Comment


    • #3
      Hallo,

      das folgende Beispiel zeigt bei mir das gewünschte Verhalten:
      <pre>
      class OSWorker
      {
      private string sData;
      public string WorkerData
      {
      get { return sData; }
      set { sData = value; }
      }

      }

      class OSAdmin
      {
      private OSWorker aObj;
      public OSAdmin(Object aParamByReference)
      {
      this.aObj = (OSWorker)aParamByReference;
      }
      public void DoWork()
      {
      this.aObj.WorkerData = "Neuer Wert";
      }
      }

      private void button1_Click(object sender, System.EventArgs e)
      {
      OSWorker aTestWorker = new OSWorker();
      aTestWorker.WorkerData = "Alter Wert";
      OSAdmin aTestAdmin = new OSAdmin(aTestWorker);
      aTestAdmin.DoWork();
      aTestAdmin = null;
      MessageBox.Show(aTestWorker.WorkerData);
      }
      }
      </pre&gt

      Comment

      Working...
      X