Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Hilfe bei OOP! wert von classe zur anderen!
blubb12345
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Nürnberg

Themenstarter:

Hilfe bei OOP! wert von classe zur anderen!

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

Hi!

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

lg
private Nachricht | Beiträge des Benutzers
blubb12345
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

ja schon, wie soll ich den sonst auf die methode Everbinden zugreifen? von der klasse Cschloss?
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
blubb12345
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

ah ok.

und wie realisiere ich das, steh grad aufm schlauch.

danke
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

z.B.

class CSchloss
{
   private CSchluessel _schluessel;

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

}
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von vbprogger am .
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
blubb12345
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers
blubb12345
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

@ 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....
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

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.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
blubb12345
myCSharp.de - Member



Dabei seit:
Beiträge: 124
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

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"; }
           
        }
    }
}


private Nachricht | Beiträge des Benutzers