Laden...

Hilfe bei OOP! wert von classe zur anderen!

Erstellt von blubb12345 vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.171 Views
B
blubb12345 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren
Hilfe bei OOP! wert von classe zur anderen!

Ok mein problem ich möchte einen Wert von ner anderen Klasse überprüfen ob der wahr oder falsch ist, aber irgendwie wird der wert nicht übernommen.

hier der quelltext:


// 1. Classe
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Autoarlam
{
    class CSchluessel
    {
       private bool verbunden;

        //Eigenschaften    "verbunden"
       public bool Everbunden
       {
           get { return (verbunden); }
           set { verbunden = value; }
       
       }

       public void AutoAnpeilen()
       { Everbunden = true; }


    }
}




//2.Classe

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Autoarlam
{
    class CSchloss
    {
        private bool _auf;

        CSchluessel Schluessel = new CSchluessel();


        //Eigenschaften: "auf"
        public bool auf
        {
            get { return (_auf); }
            set { _auf = value; }        
        }

        public void wechseln()
        {
            if (Schluessel.Everbunden == true)   //Er bekommt den wert true nicht
            {  auf=true; }                                //wenn er auf true gesetzt wurde!?
        }
        //public CSchloss(bool wert1)
        //{ this._auf = wert1; }
    }
}



//Form

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Autoarlam
{
    public partial class Form1 : Form
    {
       
        CSchluessel Schluessel = new CSchluessel();
        CSchloss Schloss = new CSchloss();

        public Form1()
        {
            InitializeComponent();

        }


        private void verbinden_cmd_Click(object sender, EventArgs e)
        {
            Schluessel.AutoAnpeilen();
        }

        private void offnen_cmd_Click(object sender, EventArgs e)
        {
           
            Schloss.wechseln();
            if (Schloss.auf == true)
            { schlss_lbl.Text = "offen"; }
           
        }
    }
}


1.Wenn man verbinden drueckt soll Everbunden auf true gesetzt werden.
2. Wenn man schloss aufsperren möchte soll in Everbunden geschhaut werden, ob die Verbindung da ist, und wenn ja soll mans öffnen können

Aber irgendwie wird der wert für Everbinden nicht gefunden bzw. steht da stets false drinnen.
Hat das was mit der Aggregation zu tun? Bitte um reichliche Hilfestellungen.

Danke im voraus blubb

M
402 Beiträge seit 2005
vor 15 Jahren

Hi!

Sieh dir mal Form und 2. Klasse an.
Hier instanzierst du jeweils ein neues Objekt vom Typ CSchluessel.

lg

B
blubb12345 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren

ja schon, wie soll ich den sonst auf die methode Everbinden zugreifen? von der klasse Cschloss?

M
402 Beiträge seit 2005
vor 15 Jahren

Naja, das sind dann zwei verschiedene Objekte und
du setzt in einem Objekt Everbunden auf true und frägst
beim anderen ab ob es true ist, das kann so nicht funktionieren...

Eine Möglichkeit wäre zb in der Form
bei der Instanzierung von CSchloss das Objekt vom Type CSchluessel
zu übergeben.

lg

B
blubb12345 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren

ah ok.

und wie realisiere ich das, steh grad aufm schlauch.

danke

1.696 Beiträge seit 2006
vor 15 Jahren

z.B.

class CSchloss
{
   private CSchluessel _schluessel;

   public CSchloss(CSchluessel pSchluessel)
   {
       this._schluessel = pSchluessel;
    }
    
   ...
   
   {
       if (this._schluessel.Everbunden == true)
       ...
    }

}

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

B
blubb12345 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren

Eine Möglichkeit wäre zb in der Form
bei der Instanzierung von CSchloss das Objekt vom Type CSchluessel
zu übergeben.

wie funktioniert das denn?

hat das denn noch was mit der oop zu tun?

danke vbprogger, funktioniert das noch einfacher?

lg blubb

B
blubb12345 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren

@ vsprogger:

hier der umgeänderte code:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Autoarlam
{
    class CSchloss
    {
        private bool _auf;

        private CSchluessel _schluessel;
        public CSchloss(CSchluessel pSchluessel)
        {
            this._schluessel = pSchluessel;
        }


        //Eigenschaften: "auf"
        public bool auf
        {
            get { return (_auf); }
            set { _auf = value; }        
        }

        public void wechseln()
        {
            if (_schluessel.Everbunden == true)
            {  auf=true; }
        }
        //public CSchloss(bool wert1)
        //{ this._auf = wert1; }
    }
}


bekomme folgende Fehlermeldung:

Fehler	1	"Autoarlam.CSchloss" enthält keinen Konstruktor, der 0-Argumente akzeptiert.

kannst du mir auch deinen Lösung erklären was da genau das prog macht?
Naja laut fehlermeldung funktioniert das immer noch nicht ganz....

1.696 Beiträge seit 2006
vor 15 Jahren

Ich würde sagen, du möchtest bitte Grundlagen dir zuerst mal aneignen, denn wenn du meinen Code übernimmst, dann musst du wissen, dass du beim Instanziieren in deinem Code ein Objekt des Typs CSchlussel übergeben musst. Das sieht man doch und die Fehlermeldung sagt das auch.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

B
blubb12345 Themenstarter:in
119 Beiträge seit 2008
vor 15 Jahren

okay habs grad auch gecheckt.war zu voreilig habs übersehen gehabt

gehts auch einfacher die werte von einem zum anderen zu überbringen?



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Autoarlam
{
    public partial class Form1 : Form
    {
        CAuto Auto = new CAuto(false, false, false);
        CSchluessel Schluessel = new CSchluessel();
        //CSchloss Schloss = new CSchloss(Schluessel);//* hierher würde es vereinfachen

        public Form1()
        {
            InitializeComponent();

        }

        private void verbinden_cmd_Click(object sender, EventArgs e)
        {
            Schluessel.AutoAnpeilen();
        }

        private void offnen_cmd_Click(object sender, EventArgs e)
        {
            CSchloss Schloss = new CSchloss(Schluessel);//Muss man hier anlegen geht das auch oben bei der anfangs initialisierung? und zwar dort *
           
            Schloss.wechseln();
            if (Schloss.auf == true)
            { schlss_lbl.Text = "offen"; }
            if (Schloss.auf == false)
            { schlss_lbl.Text = "gschlossen"; }
           
        }
    }
}