Π Π°Π±ΠΎΡΠ° Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠΌΠΈ (exceptions)
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΠ‘ ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ (ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° o ΡΡΡΠΎΠΊΠΎΠΉ object o = «c» ;). Π―Π·ΡΠΊ C# ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ. ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° Main ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΈΠΌΠ΅Π» Π²ΠΈΠ΄. ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° CompareTo, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π°Π±ΠΎΡΠ° Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠΌΠΈ (exceptions) (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΡΠΎΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° o ΡΡΡΠΎΠΊΠΎΠΉ.
object o = new object ();
ΠΈ Π²Π½ΠΎΠ²Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Debug. Start Debugging.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (runtime error) ΡΠΈΠΏΠ° «Object must be of type String», Π²ΡΠ·Π²Π°Π½Π½Π°Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° CompareTo ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, «Π½Π΅ ΡΠ²ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΊ ΡΡΡΠΎΠΊΠ΅». Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅ΡΠΎΠ΄ CompareTo ΡΠΎΠ·Π΄Π°Π΅Ρ (throw) ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ (ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎ, ΠΠ‘) ΡΠΈΠΏΠ° System. ArgumentException — Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ° ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° System.Exception. Π‘ΡΠ΅Π΄Π° ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΡΠΎΠΎΠ±ΡΠ°Ρ, ΡΡΠΎ ΡΡΠ° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΎΡΡΠ°Π»Π°ΡΡ Π±Π΅Π· ΡΠ΅Π°ΠΊΡΠΈΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΊΠΎΠ΄Π° (unhandled).
Π―Π·ΡΠΊ C# ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ. ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° Main ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΈΠΌΠ΅Π» Π²ΠΈΠ΄.
string s = «b» ;
object o = new object ();
try.
{.
C.WriteLine (s.CompareTo (o));
}.
catch (Exception e).
{.
C.WriteLine (e);
}.
C.ReadLine ();
ΠΠ½ΡΡΡΡ «Π±Π»ΠΎΠΊΠ° ΠΏΠΎΠΏΡΡΠΊΠΈ» try { } ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° CompareTo, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ (throw) ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ (ΡΡΠΎΡ ΡΠ°ΠΊΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅).
ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π²Π²Π΅ΡΡ ΠΏΠΎ ΡΡΠ΅ΠΊΡ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΉ «Π±Π»ΠΎΠΊ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ» catch (Exception e){}. Π Π±Π»ΠΎΠΊ catch ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΡΠ΅Π°Π³ΠΈΡΡΡΡΠΈΠ΅ Π½Π° ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° ArgumentException) ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ e ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΡΠΈΠΏΠ° ΠΏΡΠ΅Π΄ΠΊΠ° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΠΏΠ° Exception). ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π²Π²Π΅ΡΡ ΠΏΠΎ ΡΡΠ΅ΠΊΡ, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠ°ΡΡΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Message ΠΎΠ±ΡΠ΅ΠΊΡΠ° e.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ C. WriteLine (e) (ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΎΡ WriteLine (e.Message); ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅) ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ e.
System.ArgumentException: Object must be of type String.
at System.String.CompareTo (Object value).
at StringTestProject.StringTest.Main (String[] args) in.
Π΄Π°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΡΡΡ ΠΊ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ StringTest ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°.
ΠΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΠ‘ Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΠ‘ ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅ Π±Π»ΠΎΠΊΠ° catch ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΊΡΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ, ΠΎΠ·Π°Π³Π»Π°Π²ΠΈΠ² Π΅Π³ΠΎ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ finally. ΠΠ°Π±Π΅ΡΠΈΡΠ΅ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π±Π»ΠΎΠΊΠ° catch (ΠΏΠ΅ΡΠ΅Π΄ C. ReadLine ();) ΠΊΠΎΠ΄.
finally { C. WriteLine («Always done»); }.
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΠ‘ ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ (ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° o ΡΡΡΠΎΠΊΠΎΠΉ object o = «c» ;).
ΠΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΠ»ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅ΡΠΎΠ΄ CompareTo, ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° System. ArgumentException ΠΏΡΠΈΠ½ΡΠ» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (Message) Object must be of type String, Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Π½ΠΎΠ΅ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΠ΅ΠΊΡΡΠ°.
ΠΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² «Π±Π»ΠΎΠΊ ΠΏΠΎΠΏΡΡΠΊΠΈ» try ΠΏΠ΅ΡΠ΅Π΄ ΡΡΡΠΎΠΊΠΎΠΉ C. WriteLine (s.CompareTo (o));
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΠΈΠ΄Π°.
if (!(o is string)).
throw new ArgumentException («Object is not of type String»);
ΡΠΎ Π΄ΠΎ Π²Ρ ΠΎΠ΄Π° Π² ΠΌΠ΅ΡΠΎΠ΄ CompareTo Π΄Π΅Π»ΠΎ Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅Ρ (ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅).
ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° CompareTo, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ if, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΡΡΠΎΠΊΠ΅, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΠ»ΠΎΠ²Π½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌ ΡΠ·ΡΠΊΠ° C#. ΠΡΠ»Π΅Π΄ Π·Π° ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ if Π² ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅Π΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true ΠΈΠ»ΠΈ false. ΠΠ°Π»Π΅Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ (ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² {}), Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ true.
ΠΠ»Π°ΡΡ String, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IComparable, Π΄Π΅Π»Π°Π΅Ρ ΡΠ²ΠΎΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ°Π²Π½ΠΈΠΌΡΠΌΠΈ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌ.