C# keine überladung stimmt mit dem Deleganten überein Fehler?

Code - (programmieren, Informatik, C Sharp) Vermeintlicher Fehler - (programmieren, Informatik, C Sharp)

2 Antworten

dein btn_mittelwert_click ist eine Methode, die aus einem Ereignis (Event) "gefeuert" wird! Diese ist immer an einen sogenannten Handler verbunden. Handler sind Delegates. Die Events sind in der Klasse Button hinterlegt.

Ich weiß jetzt nicht den Handler auswendig, müsste ich nachschauen, aber im Prinzip steht in dieser Klasse etwas wie

public delegate void ChangedEventHandler(object sender, EventArgs e);

// und dann in der Button-Klasse
public event ChangedEventHandler Click;

Ich übersetze dir das nochmal auf Deutsch: In der Klasse Button ist ein Event hinterlegt, welches den ChangedEventHandler als Delagaten nutzt. D.h. JEDE Methode, die auf diesen Ereignis reagieren soll muss eine void von diesem Typ sein. Also Parameter object sender und EventArgs e

Das kannst du nicht verändern oder nur schwer, und selbst wenn ist das nicht zu empfehlen! Daher auch die Fehlermeldung! Und es ist auch logisch, dass er dich zu Bild 2 führt. Denn da hat die IDE dir den Kode erzeugt! Man kann das auch per Hand machen. In dieser Zeile steht eben, dass die Methode btn_mittelwert_click in die Event-Feuerliste mit aufgenommen werden soll. Diese Methode feuert er also, wenn das Ereignis anschlägt. Das Problem dabei ist. Diese Methode erwartet als Event einen Delegaten vom Typ 'ChangedEventHandler'. Diese lieferst du ihm aber nicht! Du hast den Kopf verändert!

Warum fragst du die Daten nicht einfach Klassenintern ab? Ist doch ganz einfach. this.werte und du hast sie.

Ich hoffe ich konnte dir helfen!

Gruß
Omni

PS: Bitte nicht sowas wie private object werte und so machen...das ist ein ganz schlechter Programmierstil!

PPS: Du bist mal einer der wenigen, die endlich mal eine anständige Frage stellen konnten, wo man Programmiersprache, Quellkode und dein Problem super entziffern kann. Bei anderen macht man teilweise dabei Rätselraten! Dafür ein Lob! :-)


Danke für deine ausführliche Hilfe, das Problem wurde mittlerweile schon gelöst :)

1

Wenn ich raten müsste würde ich sagen das liegt an dem Parameter double[] werte in dem Methodenkopf...

Entferne das mal.


Edit: Hier siehst du was ein EventHandler benötigt:

https://msdn.microsoft.com/de-de/library/system.eventhandler(v=vs.110).aspx

Dann kommt :1.
FehlerCS0021Eine Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "object" angewendet werden.

2.
FehlerCS1061"object" enthält keine Definition für "Length", und es konnte keine Length-Erweiterungsmethode gefunden werden, die ein erstes Argument vom Typ "object" akzeptiert (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis).

0
@Kyrili

Ach komm schon... willst du mir sagen das du nicht mal Fehlermeldungen interpretieren kannst?

werte ist vom Type object und hat dementsprechend keine Methode namens Length. (Gilt übrigens auch für deinen ersten Fehler. werte ist nun mal kein Array)

Schaue dir deinen Quellcode an, dann siehst du wo es steht.

0
@DontHaveAName

Ja wir machen das in der Schule erst seit 2 Wochen und ich bin noch relativ unerfahren sorry :)

Das Problem ist das ich nicht weiß wie ich den Fehler beheben kann weil wenn ich was ändere immer wieder was anderes als Fehler angezeigt wird :/

Wenn du mir genauer sagen könntest was ich deiner Meinung nach ändern sollte bin ich dir sehr dankbar :)

0
@Kyrili

private object werte in private double[] werte.

Wie und wann du dieses Array erzeugst und füllst kann ich dir nicht sagen, das kommt auf deine Applikation an.

0
@DontHaveAName

Danke schonmal, habe jezz keine Fehler mehr aber dafür steht da jezz wenn ich denn MW berechnen will :  Ein Ausnahmefehler des Typs "System.NullReferenceException" ist in WA_Array_MinMaxSort.exe aufgetreten.

0
@DontHaveAName

Ach komm schon... willst du mir sagen das du nicht mal Fehlermeldungen interpretieren kannst?

@NichtHabenEinName

Ruhig Blut und Zügel anziehen ^^ Wir alle haben mal angefangen! :-)

0
@Omnivore08

Richtig, allerdings war es für mich zumindest zu Beginn kein Problem diese interpretieren zu können. Es ist ziemlich leicht nachvollziehbar in Sprachen wie Java und C# ;)

0
@DontHaveAName

mhhhh jain....das braucht schon ein klein wenig Erfahrung. Fehler können immer passieren, klar. Aber, dass man beim Ändern einer Methode (die durch die IDE erzeugt wurde) auf einmal eine Fehlermeldung mit einem Delegaten kommt, da muss man wenigstens schon ein klein wenig mal programmiert haben ^^ Bzw. in 2 Wochen werden die sicher selbst noch keine Delegates und Events programmiert haben um dessen Bedeutung des Fehler nachzuvollziehen!

0
@Omnivore08

Naja ich habe jezz wie gesagt wenn ich den MW berechnen will einen Fehler bei int länge = werte.Length;

Vll weiß ja einer eine lösung :)

0
@Omnivore08

Meine Aussage bezog sich auch nicht auf das delegate. Sondern auf die Fehler die danach geschmissen wurden.

Er hat nicht mal versucht diese zu interpretieren, sondern hat sie einfach C&P hier rein gehauen.

Und nun mal Hand aufs Herz. Möchtest du mir etwa erzählen das diese beiden Fehlermeldungen schwer zu verstehen sind? Nach zwei Wochen sollten die sowas schon kennen :).

0
@Kyrili

Das liegt daran das du das Array höchstwahrscheinlich zu keinem Zeitpunkt erzeugt hast..

0
@DontHaveAName

2 Wochen im Sinne von 4*45 Minuten in der Woche ;)

Soviel haben wir auch noch nicht gemacht und klar versuche ich dir Fehler soweit es geht zu verstehen :)

0
@Kyrili

Programmieren lernt man nicht nur durch den Unterricht allein. Sowas erfordert weitere Leistungen zuhause. Daher ist diese Aussage keine Entschuldigung :-).

0
@DontHaveAName

Nagut, und um ehrlich zu sein macht es mir ja auch sehr viel spaß vorallem wenn man Erfolge feiern kann (erstes mal einen Taschenrechner programmieren usw.) aber ich muss (leider) mangels Erfahrung und Wissen vieles aus dem I-net nehmen :/

0
@DontHaveAName

Naja ich habe jezz wie gesagt wenn ich den MW berechnen will einen Fehler bei int länge = werte.Length;

Das ist logisch, da werte vom Typ object ist. Und object hat keine Length! Du musst ein int-Array draus machen! :

private int[] werte;

Und nun mal Hand aufs Herz. Möchtest du mir etwa erzählen das diese beiden Fehlermeldungen schwer zu verstehen sind?

Nein....die Fehlermeldungen danach waren eigentlich ersichtlich, da gebe ich dir recht! Das Grundproblem lieber Kyrili liegt darin, dass du dir über die Datentypen bzw. Klassen noch ein kleinen Kopf machen musst. Das ist, so nehme ich an, auch der Sinn und Zweck der Übrung! : Datentypen lernen, verstehen und anwenden zu wissen!

Nach zwei Wochen sollten die sowas schon kennen :).

In der Regel schon! Unsere Profs haben bei Problemen IMMER als erstes gefragt "wo ist der Fehler, was hast du schon selbst herausgefunden bzw. was hast du durch's Debuggen herausgefunden?"

Ich habe das dann mit anderen Studenten auch immer so gemacht. Ich wollte immer erst wissen, ob sie schon selbst wenigstens versucht haben den Fehler zu verstehen! Und ERST DANN, nach kompletter Ahnungslosigkeit, erst DANN habe ich geholfen!

Das hier ist ein Syntaxfehler. Bei logischen Fehlern oder Laufzeitfehlern bestehe ich immer darauf, dass der Fragesteller wenigstens einmal den Debugger bemüht hat.

Aber in einem Punkt gebe ich dir Recht. In den meisten Fällen sind die Fehlermeldungen bei Syntaxfehlern eindeutig. Vorallem Visual Studio ist da echt eine Meisterleistung mMn!

aber ich muss (leider) mangels Erfahrung und Wissen vieles aus dem I-net nehmen :/

Das ist keine Schande...das machen viele ^^

1
@Omnivore08

Danke für deinen langen Kommentar :)
Alles was du gesagt hast finde ich richtig und genau so macht es unser Lehrer auch immer :)

Gibt auch punkte auf die Hausaufgaben wenn man es wenigstens versucht :)

Und durch deine Verbesserung habe ich jezz 33 Fehler o.O

Oder ich habe was Flasch geändert  :)

0

Was möchtest Du wissen?