Frage von mAin0x, 121

Was könnte ich in diesem C# Programm falsch gemacht haben?

Ich programmiere ein simples Chatprogramm, welches am Anfang komplett funktionierte.

Allerdings kommt nun immer wieder die selbe FehlerMeldung!

Ich habe einen Screenshot gemacht.

Dieser Fehler hat immer etwas von der Klasse "GlobaleVariablen" zu tun, welche nicht besonders OOp ist aber trotzdem funktionieren sollte!

Hier die Klasse: http://pastebin.com/qwQtZxMG

Und wie gesagt, nicht besonders OOP, ich bin eigentlich sowieso eher der Prozeduale...

Antwort
von ceevee, 33

Das liegt daran, dass innerhalb der statischen Klasse die Objekterzeugung fehlschlägt.

http://stackoverflow.com/questions/7017043/typeinitializationexception-exception...

In deinem Fall wird das sicherlich daran liegen, dass die Zeile

public static TcpClient ClientSocket = new TcpClient("localhost", 4662);

eine Exception schmeißt, die dann weitergetragen wird. Du könntest im Debug-Modus mal in die innerException reingucken, was da genau falsch läuft (hast du das Programm als "Release" gestartet?). Das eigentlich Problem könnte schon sein, dass Port 4662 belegt ist bzw. dein Programm versucht, diesen Port mehrfach zu belegen.

Daneben:

  • Wie schon gesagt - niemals Umlaute als Bezeichnernamen verwenden. Das fliegt dir irgendwann eher früher als später um die Ohren
  • Ich würde alle Programmelemente englisch benennen (sprich: das ist ein Quasi-Standard in der Softwareentwicklung), weil dein Quellcode sonst ein komisches Denglisch-Mischmasch ist. Weiterer Vorteil: In der englischen Sprache gibt's keine Umlaute. :)
  • Eine Klasse mit dem Namen "GlobaleVariablen" riecht schwer danach, dass irgendwas in deiner Architektur nicht optimal ist. Für sowas nimmt man in C# Konfigurationsdateien http://openbook.rheinwerk-verlag.de/visual_csharp_2010/visual_csharp_2010_15_003...
Kommentar von mAin0x ,

Vielen Dank, ceevee!
Programmierer wie euch sollte es viel mehr geben, Meister :D

Kommentar von ceevee ,

Gern geschehen. :)

Antwort
von Sventure, 50

Versuch mal die Klasse GlobaleVariablen vorher zu initialisieren = ein Objekt von ihr zu erzeugen und versuch dann auf die Klassenvariablen zuzugreifen.

Der Fehler tritt normalerweise auf, wenn eine Variable (noch) nicht zugewiesen wurde.

Kommentar von EightSix ,

Das ist Quatsch. Was du meinst ist eine Null Referenz - davon ist hier nix zu sehen.

Den Fehler hier gibt es meist bei statischen Feldern und Konstruktoren.

Kommentar von mAin0x ,

JETZT isses noch SCHLIMMER! https://postimg.org/image/yw7mj8szb/

Kommentar von ymicky ,

Poste mal die Klasse in der du die Klassen verwendest

Kommentar von TheQ86 ,

Definiere "schlimmer" - es ist die selbe Exception, sie tritt jetzt nur an einem anderen Ort auf. C# IST KEINE prozedurale Sprache. Ganz ehrlich, ich würde das ganze Konzept entweder OOP umarbeiten oder eine Sprache wie C verwenden in der prozedurale Entwicklung vorgesehen ist.

Kommentar von mAin0x ,

Ich habe es ja jz in OOP gemacht.

Antwort
von Sivsiv, 54

Kannst du bitte auch das Snippet posten in dem die Klasse verwendet wird. So sieht es ein wenig aus als versuchst du die Klasse als Singleton zu verwenden. Das ist allerdings etwas tricky und selten eine gute Idee.
Generell solltest du vermeiden in Symbolnamen Umlaute zu verwenden. Das mag mit dem C# Compiler noch funktionieren aber es gibt genug Tools die dir dabei um die Ohren fliegen.

Kommentar von ceevee ,

Wobei... wenn der Fragesteller einen richtigen Singleton anstelle einer statischen Klasse nutzen würde, dann sollte sein Problem nicht auftreten. Falls sein Problem das ist, was ich in meiner Antwort vermute...

Keine passende Antwort gefunden?

Fragen Sie die Community