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

FehlerInVS - (Windows, Programm, programmieren)

3 Antworten

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

http://stackoverflow.com/questions/7017043/typeinitializationexception-exception-on-creating-an-object

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.htm

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

1

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.

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...

0

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.

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.

0

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

0
@mAin0x

Poste mal die Klasse in der du die Klassen verwendest

0
@mAin0x

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.

1

Was möchtest Du wissen?