ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ. ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΎΠ±ΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ·ΡΠΊΠΎΠ², ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ .NET. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π² C# ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊcΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈ Π² VB .NET, ΠΈ Π² C++ Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΈ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌ, ΡΠΎΠΆΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ (ΠΈ ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ).
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² .NET ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ "Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ" ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ "ΠΊΠΎΠΏΠΈΡ" ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. Π ΡΠΎΠΌΡ ΠΆΠ΅ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΡΠ»ΠΊΡ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ URL, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅.
ΠΡΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² .NET
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°:
β’ ΡΠΈΠΏ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅ΠΉ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ;
β’ ΡΠ»Π΅Π½, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ, ΠΈΠ»ΠΈ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ (throw) Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ:
β’ Π±Π»ΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠΈΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π½;
β’ Π±Π»ΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΈΠ»ΠΈ Π·Π°Ρ Π²Π°Ρ (catch), Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ C# ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ²Π° (try, catch, throw ΠΈ finally), Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π’ΠΈΠΏ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΎΡ System.Exception (ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ). Π‘ ΡΡΠ΅ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²ΡΡΡΠ½ΠΈΠΌ ΡΠΎΠ»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ System.Exception
ΠΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° System.Exception (ΠΊΠΎΡΠΎΡΡΠΉ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ· System.Object). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΡΠ»Π΅Π½ΠΎΠ² Π²ΠΈΡΡΡΠ°Π»ΡΠ½Ρ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ.
public class Exception: ISerializable, _Exception {
public virtual IDictionary Data { get; }
protected Exception(SerializationInfo info, StreamingContext context);
public Exception(string message, Exception innerException);
public Exception(string message);
public Exception();
public virtual Exception GetBaseException();
public virtual void GetObjectData(SerializationInfo info, StreamingContext context);
public System.Type GetType();
protected int HResult { get; set; }
public virtual string HelpLink { get; set; }
public System.Exception InnerException { get; }
public virtual string Message { get; }
public virtual string Source { get; set; }
public virtual string StackTrace { get; }
public MethodBase TargetSite { get; }
public override string ToString();
}
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ System.Exception, Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°ΠΊΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΈΠΏΠ° IndexOutOfRangeException ΠΏΡΠΈΠ½ΡΡΡΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ "Index was outside the bounds of the array", Ρ.Π΅. "ΠΡΡ ΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°").
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π .NET 2.0 System.Exception ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ _Exception, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±ΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π΅ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ.
Π ΡΠ°Π±Π». 6.1 ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»Π΅Π½ΠΎΠ² System.Exception.
Π’Π°Π±Π»ΠΈΡΠ° 6.1. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ»Π΅Π½Ρ ΡΠΈΠΏΠ° System.Exception
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Data ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² .NET 2.0. ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΏΠ°Ρ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (ΠΏΡΠ΅Π΄-cΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΌ IDictionary), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄Π°Π½Π½ΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ HelpLink ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π΄ΡΠ΅Ρ URL ΡΠ°ΠΉΠ»Π° ΡΠΏΡΠ°Π²ΠΊΠΈ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΡ InnerException ΠΠΎΡΡΡΠΏΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ , ΡΡΠ°Π²ΡΠΈΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΠΈΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Message ΠΠΎΡΡΡΠΏΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ. Π‘Π°ΠΌΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π·Π°Π΄Π°Π΅ΡΡΡ, ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Source ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ StackTrace ΠΠΎΡΡΡΠΏΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΠΊ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ ΡΠ°ΠΌΠΈ, ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ TargetSite ΠΠΎΡΡΡΠΏΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠΏ MethodBase, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠΈΠΉ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (ToString() Π±ΡΠ΄Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°)ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ "ΠΏΠΎΠ»ΡΠ·Ρ" ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π½ΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠΌΠ΅Π½eΠΌ SimpleException, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ° Car (Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ) ΠΈ Radio (ΡΠ°Π΄ΠΈΠΎ), ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ("has-a"). Π’ΠΈΠΏ Radio ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΠΈ Π²ΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ°Π΄ΠΈΠΎ.
public class Radio {
public void TurnOn(bool on) {
if (on) Console.WriteLine("Π Π°Π΄ΠΈΠΎΠΏΠΎΠΌΠ΅Ρ ΠΈβ¦");
else Console.WriteLine ("Π ΡΠΈΡΠΈΠ½Π°β¦");
}
}
Π Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠ° Radio Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ/Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΈΠΏ Car ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Car ΠΏΡΠ΅Π²ΡΡΠΈΡ ΠΏΡΠ΅Π΄Π΅Π» Π΄Π»Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ (ΡΡΠΎΡ ΠΏΡΠ΅Π΄Π΅Π» Π·Π°Π΄Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ»Π΅Π½Π°-ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ), ΡΠΎ "Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π²Π·ΡΡΠ²Π°Π΅ΡΡΡ" ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Car ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠΌ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π½Π°-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° bool Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ carIsDead (Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΡΠ°Π·ΡΡΡΠ΅Π½). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΈΠΏ Car ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅Π½ΠΎΠ²-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ΅ΠΊΡΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ "Π»Π°ΡΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ", Π΄Π°Π½Π½ΠΎΠ΅ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ². ΠΠΎΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡΠΌΠΈ).
public class Car {
// ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ° ΡΠΊΠΎΡΠΎΡΡΠΈ.
public const int maxSpeed = 100;
// ΠΠ°Π½Π½ΡΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
private int currSpeed;
private string petName;
// Π Π°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΡΡΠΎΡ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ?
private bool carIsDead;
// Π Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ Π΅ΡΡΡ ΡΠ°Π΄ΠΈΠΎ.
private Radio theMusicBox = new Radio();
// ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ.
public Car() {}
public Car(string name, int currSp) {
currSpeed = currSp;
petName = name;
}
public void CrankTunes(bool state) {
// ΠΠ°ΠΏΡΠΎΡ Π΄Π΅Π»Π΅Π³Π°ΡΠ° Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
theMusicBox.TurnOn(state);
} // He ΠΏΠ΅ΡΠ΅Π³ΡΠ΅Π»ΡΡ Π»ΠΈ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ?
public void Accelerate(int delta) {
if (carIsDead) Console.WriteLine("{0} Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρβ¦", petName);
else {
currSpeed += delta;
if (currSpeed βΊ maxSpeed) {
Console.WriteLine("{0} ΠΏΠ΅ΡΠ΅Π³ΡΠ΅Π»ΡΡ!", petName);
currSpeed = 0; carIsDead = true;
} else Console.WriteLine("=βΊ currSpeed = {0}", currSpeed);
}
}
}
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Main(), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Car ΠΏΡΠ΅Π²ΡΡΠΈΡ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ (ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ) ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ maxSpeed).
static void Main(string[] args) {
Console.WriteLine("*** Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ***");
Car myCar = new Car("Zippy", 20);
myCar.CrankTunes(true);
for (int i = 0; i βΉ 10; i++) myCar.Accelerate(10);
Console.ReadLine();
}
Π’ΠΎΠ³Π΄Π° ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π²ΡΠ²ΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π½Π° ΡΠΈΡ. 6.1.
Π ΠΈΡ. 6.1. ΠΠ±ΡΠ΅ΠΊΡ Car Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ
ΠΠ΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ