Fehler im Code, aber ich weiß nicht wo der Fehler liegt ( C# und SharpDevelop)?

3 Antworten

Von Experte ohwehohach bestätigt

Danke für deine Ergänzung, macht es klarer - okay, die Einrückung ist kein Zeichen gewesen.

Bild zum Beitrag

Aber; du hast oben

static decimal e angegeben - hier hast du in der Methode CheckBox2CheckedChanged EventArgs e gegeben - das der tieferen Instanz überwiegt. Heißt, dass du hier mit "e" nicht auf diesen Decimal Wert zeigst, sondern auf das EventArgs e.

Heißt, du musst entweder dein e oben umbenennen oder das EventArgs e.

Dann würde es schon laufen.

Aber wie ohwehohach schon sagt, sind die Namen etwas ungünstig gewählt und ein static hier nicht sinnig. Ersteres kann man ignorieren, da du gerade erst beginnst und es wohl erstmal zum Laufen bringen wolltest (daher haben auch deine Textboxen wohl noch die Standardnamen).

Aber den Static solltest du nur nutzen, wenn du weißt, dass du ihn brauchst.

Was macht static?

Angenommen;

public class Klasse
{
  public static double var1 = 0;
}

In dem Falle teilen sich alle Instanzen, also Kopien der Klasse diesen Wert var1.

Heißt;

Klasse klasse1 = new Klasse();
Klasse klasse2 = new Klasse();
Klasse.var1 = 1;

So wäre nun, da du var1 geändert hast, alle var1 aller Instanzen (Kopien der Basis) 1.

Wenn du jetzt zum Beispiel ein Auto mit PS angeben willst und die PS statisch wären, hätten alle Autos die gleichen PS.

Fragen? Nur zu!

LG

Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer im IT-Consulting
 - (Computer, Technik, Technologie)

apache20748 
Beitragsersteller
 16.06.2021, 13:15

Vielen Dank du hast mir wirklich sehr geholfen und gut erklärt :D

Vielleicht melde ich mich noch mal, falls wieder mal etwas nicht passt

0

Naja, den Wert e gibt es schon als Methodenparameter mit dem Typ System.EventArgs. Daher gibt es einen Namenskonflikt und da lokale Variablen und Parameter immer Vorrang haben (anders gesagt: Es wird immer die Variable aus dem innersten Scope verwendet), kann der Compiler eben keinen Decimal an ein System.EventArgs zuweisen.

Außerdem: Warum sind Deine Membervariablen denn static?? Und nein, "Einbuchstabenvariablen" sind keine gute Idee für Membervariablen.


apache20748 
Beitragsersteller
 16.06.2021, 11:44

Habe vorgestern mit programmieren erst angefangen, also kenne ich mich nicht so aus, habe die Aufgaben eines Freundes der Informatik/Physik (9 Klasse) in der Schule hat versucht zu machen und dazu hat der Lehrer "Tips/Erklärungen" gegeben und nach den Beispielen habe ich versucht den Taschenrechner zu programmieren (Input a+/-/*/: funktioniert auch, jetzt wollte ich versuchen einen Input c zu machen.

Könntest du mir sagen, was ich dort ändern muss, denn ehrlich gesagt habe ich nur die Hälfte deiner ersten Erklärung verstanden :D

0
ohwehohach  16.06.2021, 11:59
@apache20748

Also. Die Variablen sollten nicht static sein. Das macht sie zu Klassenvariablen und nicht zu Variablen, die an einer bestimmten Instanz einer Klasse hängen.

Zweitens sollten sie halt nicht a, b, c, d, e heißen, sondern beispielsweise zahl1, zahl2, ...

Den Variablennamen e gibt's halt schon - einmal als Klassenvariable (von Dir deklariert) und einmal als Parameter für den Event-Handler, in dem Dein Code steht. Mit anderem Typ.

Ansonsten: Poste hier Deinen Code, dann kann ich ihn verbessern.

0
Dultus, UserMod Light   16.06.2021, 11:59

Guter Punkt, habe völlig vergessen, dass der Standardname vom EventArgs e ist - allerdings glaube ich, dass er auch so in einer falschen Zeile ist - würde zumindest die merkwürdige Einrückung nach dem if erklären.

Größere Screenshots sind immer toll. :o)

0

Probiere dies:

  • Vereinfachung: hole aus dem Block die Rückkonvertierung heraus und uU auch die anderen 2 Zahlen.
  • Verwende Zwischenvariablen, d.h. weise den Text einer char Variable zu und probiere diese dann zu konvertieren.
Woher ich das weiß:Berufserfahrung – ich arbeite schon sehr lange im EDV Bereich, viele Sparten

ohwehohach  16.06.2021, 12:06

Nee, das hat diesmal damit nichts zu tun. Es gibt einfach eine Klassenvariable namens e und einen Parameter namens e. Da der Scope des Parameters näher an der Verwendung ist, wird das e aus dem Parameter genommen. Und das ist in diesem Fall ein System.EventArgs-Parameter, dem man natürlich keinen Decimal zuweisen kann.

2