Keine Exception-Deklaration bei C#?

Hallo Leute,

Bin ich nur zu blind es zu sehen, oder ist es bei C# immer noch so, dass der Compiler das Werfen und Fangen von Exceptions nicht überprüft, man das nichtmal deklarieren muss (so wie es bei Java recht gut gelöst ist)?

Wenn ja, warum??? :smile:

Danke und Grüße, Robert

Hallo Robert

Könntest Du deine Frage ein bisschen verständlicher schreiben? Bin nicht ganz gestiegen.

Gruss

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Guiseppe,

Sorry, ich versuchs nochmal. :smile:

Worum es mir geht ist, dass man in C# scheinbar nicht deklarieren muss wenn eine Methode eine bestimmte Exception wirft. Und der Compiler überprüft auch nicht ob eine Exception gefangen wird oder nicht.

Bei Java musst du wenn du aus einer Methode eine Exception werfen willst das deklarieren:
public void test() throws MyException
{ … }

Dadurch hat der Compiler volle Kontroller darüber ob alle Exceptions irgendwo behandelt werden.

Für mich war das bei meinem Umstieg von C++ auf Java eines der grossen Java-Pluspunkte, weil es bei größeren Anwendungene das Leben wirklich erleichtert.

Deswegen war ich jetzt schwer enttäuscht, dass das bei C# immer noch wie bei C++ ist, scheinbar kümmert sich der Compiler nicht darum ob man das richtig macht oder nicht.

Und weil ich mir das gar nicht vorstellen konnte, dass das bei C# nicht verbessert wurde wollte ich hier mal nachfragen ob man da vielleicht einfach nur einen Compiler-Switch oder so angeben muss und dann überprüft er das. Ist aber nur eine kleine Hoffnung, ich hab auch nirgendwo den Syntax mit dem man das dann deklarieren müßte gefunden. :frowning:

Danke und Grüße,
Robert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo

Habs glaubs begriffen :smile:

Die Deklartion
„public void test() throws MyException“ hat aber auch nachteile (?) Denn somit kann die methode Test nur eine exception „schmeissen“.

Im c# wirft man exceptions folgendermassen:

public void test()
{
...
if(!x)
{
thorw new myExeption1(myParams1)
}
else
{
throw new myExpetion2(myParams2)
}
}

Worum es mir geht ist, dass man in C# scheinbar nicht
deklarieren muss wenn eine Methode eine bestimmte Exception
wirft. Und der Compiler überprüft auch nicht ob eine Exception
gefangen wird oder nicht.

Ja das ist tatsächlich so.

Dadurch hat der Compiler volle Kontroller darüber ob alle
Exceptions irgendwo behandelt werden.

Was mit den Exceptions die das Framework wirft. Muss man diese im Java dann alle abfangen, damit der Compiler zufrieden ist?

Deswegen war ich jetzt schwer enttäuscht, dass das bei C#
immer noch wie bei C++ ist,

Scheinbar ein Design entscheid. Da man bei c# ja sehr viel von Java abgeguckt hat.

Gruss

Hallo Guiseppe,

Die Deklartion
„public void test() throws MyException“ hat aber auch
nachteile (?) Denn somit kann die methode Test nur eine
exception „schmeissen“.

Man kann beliebig viele Exception-Typen für eine Methode deklarieren, also auch:

public void test() throws MyException1, MyException2

    
    Dann kann man wie in deinem Code-Beispiel zwei verschiedene Exceptions werfen.
    
    
    
    
    > Was mit den Exceptions die das Framework wirft. Muss man diese  
    > im Java dann alle abfangen, damit der Compiler zufrieden ist?
    
    
    Ja, in Java ist es grundsätzlich so, dass alle Exceptions an irgendeiner Stelle behandelt werden müssen. Egal ob sie aus eigenem Code oder von Fremd-Libraries kommen.
    
    
    
    
    > Scheinbar ein Design entscheid. Da man bei c# ja sehr viel von  
    > Java abgeguckt hat.
    
    
    Ja, wird wohl so sein. Ist finde ich schade, das mag zwar wie eine Kleinigkeit aussehen, spart aber IMHO viel Zeit weil es den Programmierer dazu zwingt mehr über die Fehlerbehandlung nachzudenken. Und es hat IMHO auch keine Nachteile. Aber naja. :smile:
    
    Grüße, Robert

Ja, in Java ist es grundsätzlich so, dass alle Exceptions an
irgendeiner Stelle behandelt werden müssen. Egal ob sie aus
eigenem Code oder von Fremd-Libraries kommen.

Stimmt nur fast, in Java gibt es ja auch noch RuntimeExceptions :smile:

Hallo

Per zufall heute darüber gestolpert :smile:

http://www.gotdotnet.com/team/csharp/learn/columns/a…

gruss,

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Guiseppe,

Danke, dass du nach so langer Zeit noch an die Anfrage gedacht hast. :smile:

Interessante Argumente, aber meiner Meinung nach sind da keine wirklichen Vorteile drinnen. Das das Code Quality fördert ist für mich z. B. überhaupt nicht nachvollziehbar. Aber naja. :smile:

Grüße, Robert