PDA

View Full Version : فرق بين Exception و SystemException



HAMRAHSOFT.IR
چهارشنبه 19 مرداد 1390, 08:12 صبح
سلام نميدونم سوالم درست پرسيدم يا نه

مخواستم ببينم فرق بين Exception و SystemException در چي

يعني اگر از SystemException استفاده كنيم در برنامه ايا مشكلي پيش مياد ؟

خطا را درست برنمگردون يا فرقي ندارن

monirprogram
چهارشنبه 19 مرداد 1390, 08:52 صبح
اگر تو msdn نگاه کنی ،توضیحی که برای Exception آورده این هست که :
This class is the base class for all exceptions. When an error occurs, either the system or the currently executing application reports it by throwing an exception containing information about the error. Once thrown, an exception is handled by the application or by the default exception handler.
(که به طور خلاصه یعنی شامل انواع خطاهایی که ممکنه پیش بیاد.یعنی هم خطاهای سیستم و هم برنامه کاربردی)

تا اینجا مشخصه . اماتوضیحی که برای SystemException آورده این هست که :
This class is provided as a means to differentiate between exceptions defined by the system versus exceptions defined by applications

و نکته جحالب در ادامه توضیح هست که میگه:
SystemException does not provide information as to the cause of the Exception (http://msdn.microsoft.com/en-us/library/system.exception.aspx). که فکر نکنم نیاز به توضیح داشته باشه .

http://msdn.microsoft.com/en-us/library/system.exception.aspx
http://msdn.microsoft.com/en-us/library/system.systemexception.aspx

HAMRAHSOFT.IR
چهارشنبه 19 مرداد 1390, 10:08 صبح
تشكر از شما ولي اگه بزبان ساده و فرسي توضيح مداديد فكنم بهتر بود

monirprogram
چهارشنبه 19 مرداد 1390, 11:11 صبح
من متن اصلی رو گذاشم والبته برای هر کدوم توضیح دادم :لبخند:
ولی به زبون ساده این میشه که SystemException فقط اشکالات و خطاهای مربوط به سیستم رو بر میگردونه. اما شما در نظر بیار ممکنه برنامه ایکه ایجاد کردی از برنامه کاربردی خاصی استفاده میکنه(مثلا برای تهیه گزارش از crystal report استفاده میکنی . یا فرضا زمان استفاده از sqlserver موقع خواندن اطلاعات خطایی داخل sql اتفاق بیفته)، در اینطور برنامه قادر به کشف خطا نیست. اما Exception میتونه هر نوع خطایی رو تشخیص بده،چه خطاهای سیستمی و چه خطاهای برنامه کاربردی .:لبخندساده:

HAMRAHSOFT.IR
چهارشنبه 19 مرداد 1390, 11:52 صبح
پس نتيجه اينكه هميشه از Exception استفاده كنيم كه بتونيم بهتر به نتيجه برسيم

monirprogram
چهارشنبه 19 مرداد 1390, 12:55 عصر
تقریبا . ولی فکر کنم اگر هر جای برنامه بسته به شرایط از Exception خودش استفاده شه بهتر باشه. لیست پایین فقط تعدادی از انواع exception هست. بهتر هست وقتی داریم تیکه کد مینویسیم، بسته به شرایط کدمون حالت ممکن خودش رو در نظر بگیریم. فرضا برای خطای احتمالی در ارتباط با بانک استفاده از SqlException بهتر از Exception هست و مابقی حالات


+--System.Object
|
|
+--System.Exception
|
|
+--System.SystemException
|
|
+--System.ArgumentException
| |
| |
| +--System.ArgumentNullException
| |
| |
| +--System.ArgumentOutOfRangeException
| |
| |
| +--System.DuplicateWaitObjectException
|
|
+--System.ArithmeticException
| |
| |
| +--System.DivideByZeroException
| |
| |
| +--System.OverflowException
| |
| |
| +--System.NotFiniteNumberException
|
|
+--System.ArrayTypeMismatchException
|
|
+--System.ExecutionEngineException
|
|
+--System.FormatException
|
|
+--System.IndexOutOfRangeException
|
|
+--System.InvalidCastException
|
|
+--System.InvalidOperationException
| |
| |
| +--System.ObjectDisposedException
|
|
+--System.InvalidProgramException
|
|
+--System.IO.IOException
| |
| |
| +--System.IO.DirectoryNotFoundException
| |
| |
| +--System.IO.EndOfStreamException
| |
| |
| +--System.IO.FileLoadException
| |
| |
| +--System.IO.FileNotFoundException
| |
| |
| +--System.IO.PathTooLongException
|
|
+--System.NotImplementedException
|
|
+--System.NotSupportedException
|
|
+--System.NullReferenceException
|
|
+--System.OutOfMemoryException
|
|
+--System.RankException
|
|
+--System.Security.SecurityException
|
|
+--System.Security.VerificationException
|
|
+--System.StackOverflowException
|
|
+--System.Threading.SynchronizationLockException
|
|
+--System.Threading.ThreadAbortException
|
|
+--System.Threading.ThreadStateException
|
|
+--System.TypeInitializationException
|
|
+--System.UnauthorizedAccessException

HAMRAHSOFT.IR
چهارشنبه 19 مرداد 1390, 13:48 عصر
شرمنده ولي
چرا فرضا برای خطای احتمالی در ارتباط با بانک استفاده از SqlException بهتر از Exception هست

علت چي؟ مگه هردو خطا كامل برنمگردن؟

ali.rezaei7
چهارشنبه 19 مرداد 1390, 14:44 عصر
سلام نميدونم سوالم درست پرسيدم يا نه

مخواستم ببينم فرق بين Exception و SystemException در چي

يعني اگر از SystemException استفاده كنيم در برنامه ايا مشكلي پيش مياد ؟

خطا را درست برنمگردون يا فرقي ندارن SystemException از Exception مشتق شده است. استثناهای سطح سیستم و پلتفورم NET. از این کلاس مشتق میشن مثل IndexOutOfrange . به اینها استثناهای سطح سیستم میگن. یک نوع دیگه هم داریم که به استثناهای سطح برنامه معروفند و از کلاس ApplicationException مشتق میشن. که معمولا این استثناها از کدبرنامه اجرایی به وجود میان. به عنوان مثال اگر شما بخواهید Exception خاص برنامه خودتون رو طراحی کنید. باید اون رو از ApplicationException مشتق کنید. این نشون میده که Exception مربوط به سطح برنامه هستش.


شرمنده ولي
چرا فرضا برای خطای احتمالی در ارتباط با بانک استفاده از SqlException بهتر از Exception هست

علت چي؟ مگه هردو خطا كامل برنمگردن؟

Exception یک کلاس پایه است که تمامی Exceptionها از اون مشتق می شن. اما دریک برنامه باید این مسئله را درنظر داشت که نتها خطاهایی که امکان رخ دادنشون وجود داره رو باید گیر انداخت و استفاده مستقیم از کلاس Exception یک امر غیراصولی و نادرست به حساب میاد
لینک زیر رو حتما ببینید:
http://barnamenevis.org/archive/index.php/t-209661.html

monirprogram
چهارشنبه 19 مرداد 1390, 14:53 عصر
This class is created whenever the .NET Framework Data Provider for SQL Server encounters an error generated from the server. (Client side errors are thrown as standard common language runtime exceptions.) SqlException always contains at least one instance of SqlError (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlerror.aspx).

اول اصل مطلب رو بخون به اینگلیش. :لبخند: بعد هم exeception فقط خطای برنامه است. یعنی اگر مشکلی داخل sql اتفاق بیفته نمیتونه تشخیص بده. پس فقط یکسری خطاهایکلی رو اعلام میکنه (یه سری خطاهای تعریف شده)