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?
@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.
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?
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.
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 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code