myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Objekt aus Hauptklasse auch in Nebenklassen verwenden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Objekt aus Hauptklasse auch in Nebenklassen verwenden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
C-sharper96 C-sharper96 ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.09.2019
Beiträge: 4
Entwicklungsumgebung: VS 2017 Prof.
Herkunft: Bayern


C-sharper96 ist offline

Objekt aus Hauptklasse auch in Nebenklassen verwenden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo liebe Community

Ich stehe hier gerade vor einem Problem, für welches ich einfach keine Antworten finde enttäuscht
Wahrscheinlich hab ich einfach nur einen Wurm oder so in meinem Gedankengang.

Was ich habe:

- Hauptklasse (steht wegen einer Umstrukturierung des Programmes nicht viel drin)
- 3 Nebenklassen/DLLs
- erste baut einen Bus auf.
- zweite liest den Bus ein und erstellt einen neuen, mit anderen Attributen, aber in der gleichen
Struktur
- dritte liest beide vorherigen Busse aus und wertet die nötigen Informationen aus.

C#-Code:
using DLL_A;
using DLL_B;
using DLL_C;
namespace Hauptprogramm
{
.
.
.
        public void Main()
        {
            Bus BusObject;
            dllA.Write(ref BusObject)
            dllB.ReadWrite(ref BusObject)
            dllC.Read(ref BusObject)
        }
    }
    public class Bus
    {
         //Hier stehen alle Attribute
    }
}

C#-Code:
using Assemblys_für_das_jeweilige_Programm
namespace DLL_A
{
.
.
.
        public void Write( N/A ) <- Hier brauch ich ja jetzt den Typen Bus... sowie bei den anderen auch.
.
.
.
}

Was ich möchte:

Ein Objekt welches in der Hauptklasse erzeugt wird und in DLL 1 und 2 dessen Attribute beschrieben/definiert werden. In der 3. DLL soll das fertig definierte Objekt dann ausgelesen werden.

Nur komme ich einfach nicht drauf...

Mit freundlichen Grüßen
17.09.2019 14:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.187
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Im Prinzip ist das Software Architektur; les Dich mal in den Bereich ein.
 [Artikel] Drei-Schichten-Architektur ist die am meisten verbreitete dazu.

Wenn Dir diese Konzepte fehlen, dann wird es sehr schwer Software zu entwickeln.
17.09.2019 14:14 Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.975
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich ignoriere die, äh, unkonventionelle Bezeichnung "Nebenklasse" und "Hauptklasse" und fasse mal zusammen:

du hast drei voneinander unabhängige Klassen, die jeweils etwas mit einem Objekt des Typs "Bus" machen. Außerdem hast du noch eine Kontextklasse, die diese drei Klassen orchestriert (i.e. aufruft und die Reihenfolge der Aufrufe und damit das Ergebnis bestimmt).

Der Kontext braucht also Referenzen auf jede der benutzten Klassen. Soweit alles richtig bei dir.
Allerdings müssen die drei benutzten Klassen auch die Klasse "Bus" kennen. Die definierst du allerdings im Kontext, von dem die DLL_* nix wissen.

Nebenbei bemerkt, ist die Nutzung von "ref" in dem Kontext schlicht falsch, und auch die Benutzung von statischen Methoden willst du dir lieber abgewöhnen.

Also lieber so:

C#-Code:
namespace Abstractions
{
   public class Bus
  {
      public string Name { get; set; }
  }
}

namespace DLL_A
{
  using Abstractions;
   public class Writer
  {
      Write(Bus bus) { bus.Name = "Wert1"; }
  }
}
namespace DLL_B
{
  using Abstractions;
   public class ReadWriter
  {
      ReadWrite(Bus bus) { Console.WriteLine(bus.Name); bus.Name = "Wert2"; }
  }
}

namespace DLL_C
{
  using Abstractions;
   public class Reader
  {
      Read(Bus bus) { Console.WriteLine(bus.Name); }
  }
}

namespace Hauptprogramm
{
  using Abstractions;
  using DLL_A;
  using DLL_B;
  using DLL_C;

  public class Context
  {
    public static void Main()
    {
        Writer writer = new Writer();
        ReadWriter readWriter = new ReadWriter();
        Reader reader = new Reader();
        Bus myBus = new Bus();
        writer.Write(bus);
        readWriter.ReadWrite(bus);
        reader.Read(bus);
    }
  }
}

Wobei mir generell nicht einleuchtet, wieso die Klassen alle in unterschiedlichen Namespaces sein müssen. Ich gehe aber mal davon aus, dass du dir dabei was gedacht hast.

LaTino

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LaTino am 17.09.2019 14:25.

17.09.2019 14:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
pinki
myCSharp.de-Mitglied

avatar-4072.jpg


Dabei seit: 24.08.2008
Beiträge: 671
Herkunft: OWL


pinki ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich tippe mal, dass du  Properties und keine  Attribute meinst.
17.09.2019 15:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
C-sharper96 C-sharper96 ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.09.2019
Beiträge: 4
Entwicklungsumgebung: VS 2017 Prof.
Herkunft: Bayern

Themenstarter Thema begonnen von C-sharper96

C-sharper96 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Abt:
Im Prinzip ist das Software Architektur; les Dich mal in den Bereich ein.
 [Artikel] Drei-Schichten-Architektur ist die am meisten verbreitete dazu.

Danke, sehr interessant, werde ich mir definitv anschauen. Daumen hoch

Zitat von Abt:
Wenn Dir diese Konzepte fehlen, dann wird es sehr schwer Software zu entwickeln.

Zitat von LaTino:
Ich ignoriere die, äh, unkonventionelle Bezeichnung "Nebenklasse" und "Hauptklasse"
[...]
Nebenbei bemerkt, ist die Nutzung von "ref" in dem Kontext schlicht falsch, und auch die Benutzung von statischen Methoden willst du dir lieber abgewöhnen.

Zitat von pinki:
Ich tippe mal, dass du Properties und keine Attribute meinst.

Bin leider erst seit ~6 Monaten in der Informatik tätig, weswegen mir meist die Fachbegriffe fremd sind oder ich die vertausche unglücklich
Das meiste hab ich mir bis dato selber beigebracht, wobei viele Dokumentationen nicht sonderlich Einsteigerfreundlich geschrieben sind. Also meiner Meinung nach.
Aber danke für die Tipps! Daumen hoch

Zitat von LaTino:
Also lieber so:

Vielen Dank! Daumen hoch
Das macht Sinn verwundert Aber soweit habe ich gar nicht gedacht.
Werde das definitiv so ausprobieren.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von C-sharper96 am 17.09.2019 15:21.

17.09.2019 15:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.396
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Aber warum hast du überhaupt 3 verschiedene DLLs mit jeweils ähnlicher Funktionalität???
17.09.2019 15:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
C-sharper96 C-sharper96 ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.09.2019
Beiträge: 4
Entwicklungsumgebung: VS 2017 Prof.
Herkunft: Bayern

Themenstarter Thema begonnen von C-sharper96

C-sharper96 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
Aber warum hast du überhaupt 3 verschiedene DLLs mit jeweils ähnlicher Funktionalität???

Bei dem Programm handelt es sich um ein Bindeglied/Schnittstelle zwischen 3 verschiedenen Programmen. Deswegen liegen jedem Programm eine eigene API zugrunde auf die ich alle zugreifen soll. Das ganze möchte ich natürlich getrennt voneinander stattfinden lasse.

API 1 liest schlichtweg dynamisch das gewählte Project aus und stellt die Topologie in einer n-ary-Baumstruktur? dar. Zusätzlich werden hier die notwendigen Assemblys versionsabhängig geladen durch einen Assembly-Loader. Bei den anderen ist so etwas nicht notwendig.

API 2 braucht dann die Struktur und ein paar Eigenschaften um in dem zweiten Programm quasi die gleiche Topologie zu erstellen.

API 3 benötigt dann alle Informationen die sich erst durch das erstellen in API 2 ergeben haben und die restlichen von API 1 um alles miteinander zu verknüpfen.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von C-sharper96 am 17.09.2019 15:37.

17.09.2019 15:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.187
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von C-sharper96:
Das meiste hab ich mir bis dato selber beigebracht, wobei viele Dokumentationen nicht sonderlich Einsteigerfreundlich geschrieben sind. Also meiner Meinung nach.

Es macht auch keinen Sinn jede Dokumentation so zu gestalten, dass kein Basiswissen vorhanden ist.
Dokumentationen werden so geschrieben, dass es um das spezifische Problem geht: man kommt sachlich auf den Punkt.

Wenn da Vorwissen fehlt dann meist deswegen, weil "einfach mal drauf losgelegt" hat statt einen Lernpfad zu gehen.
17.09.2019 16:23 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 21.11.2019 22:18