myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Grundlagen von C# (https://www.mycsharp.de/wbb2/board.php?boardid=88)
--- Objekt aus Hauptklasse auch in Nebenklassen verwenden (https://www.mycsharp.de/wbb2/thread.php?threadid=122191)


Geschrieben von C-sharper96 am 17.09.2019 um 14:10:
  Objekt aus Hauptklasse auch in Nebenklassen verwenden
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


Geschrieben von Abt am 17.09.2019 um 14:14:
 
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.


Geschrieben von LaTino am 17.09.2019 um 14:24:
 
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


Geschrieben von pinki am 17.09.2019 um 15:08:
 
Ich tippe mal, dass du  Properties und keine  Attribute meinst.


Geschrieben von C-sharper96 am 17.09.2019 um 15:21:
 
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.


Geschrieben von Th69 am 17.09.2019 um 15:24:
 
Aber warum hast du überhaupt 3 verschiedene DLLs mit jeweils ähnlicher Funktionalität???


Geschrieben von C-sharper96 am 17.09.2019 um 15:35:
 
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.


Geschrieben von Abt am 17.09.2019 um 16:23:
 
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.


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.11.2019 00:57