Laden...

Klassen Instanz an eine andere Klasse übergeben?!

Erstellt von Janiiix3 vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.572 Views
J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 5 Jahren
Klassen Instanz an eine andere Klasse übergeben?!

Nabend,

Der Compiler wirft mir (bestimmt aus guten Grund..) eine Fehlermeldung..

Fehlermeldung:
Fehler CS0236 Ein Feldinitialisierer kann nicht auf das nicht statische Feld bzw. die nicht statische Methode oder Eigenschaft "Form1.Parser" verweisen.

Snippets

Hier wird eine Instanz der Klasse erzeugt..


namespace Interpreter
{
    public partial class Form1 : Form
    {
        Cmd Parser = new Cmd();
        Serial  Port = new Serial(Parser);

Diese Klasse soll diese annehmen


public class Serial
{
    private Cmd Parser = null;

    public Serial(object inst)
    {
        Parser = (Cmd)inst;
    }

Was mache ich falsch?

T
2.224 Beiträge seit 2008
vor 5 Jahren

@Janiiix3
Du solltest deinen Konstruktor für Serial anpassen.
Da du nur einen Parser übergeben kannst, solltest dein object inst auch direkt als Cmd übergeben werden.

Ich würde hier fast überlegen ob es nicht sinnvoller wäre Parser direkt in Serial über eine Property o.ä. öffentlich zu machen oder hast du mehr als einen Parser in deinem Projekt?
So müsstest du nur Serial instanzieren und kannst über die Property dann auf den Parser zugreifen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 5 Jahren

Ich brauche den Parser auch noch an anderen Stellen.
Das mit dem Properity würde auch gehen, nur was ist wenn man das mal vergisst? Ist mir leider schon oft passiert.
Gibt es denn keine andere Möglichkeit die Instanz der Klasse zu übergeben ohne ne statische Klasse?

T
2.224 Beiträge seit 2008
vor 5 Jahren

Du musst deine Felder im Konstruktor von Form1 instanzieren.
Nur so können nicht static Felder/Properties auch richtig instanziert werden.

Kurz mal Google angeschmießen zeigt dir auch Details dazu:
https://docs.microsoft.com/de-de/dotnet/csharp/misc/cs0236

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.834 Beiträge seit 2008
vor 5 Jahren

Das ist ein Standardfall für Objektorientierte Programmierung; nichts besonderes.
Und in diesem Fall sogar auch nen Grund wieso es Pattern wie Dependency Injection gibt: Du solltest Abhängigkeiten nicht manuell auflösen!

Vermutlich lohnt sich also mal ein grundlegender Blick in die Grundzüge von Software Architektur 😉
[Artikel] Drei-Schichten-Architektur
[Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio

Wenn Du an solch einer Methode oder Ctor ein "object" empfängst, dann ist das (auch idologisch) ganz ganz weit weg von typisierter Programmierung 😉