الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

فائدة Checked

مغلق
بدأه Ahmed H. Alawady في 28 مارس 2006 · 6 رد · 767 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

ما الفرق يين الكودين التاليين

try 
    {
        result =  checked((int)(lhs + rhs));
    }
    catch (OverflowException e) 
    {
        // Handle overflow exception here.
    }

try 
    {
        result =  (int)(lhs + rhs);
    }
    catch (OverflowException e) 
    {
        // Handle overflow exception here.
    }

فما فائدة وجود checked

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#2

الـ Default هو استخدام checked , ولذلك أعتقد أنه في هذه الحاله لا يوجد فرق بين الكودين !

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#3

ولكن ما هي فائدة Checked ؟

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#4

اذا كتبت الكود الثاني كما هو تماما ولم تضيف اليه checked فالبرنامج سيكون متساوي تماما للبرنامج الذي تستخدم معه checked .. واذا كنت لا تريد ذلك فغير الاعدادات الخاصه بالمشروع بأن تجعل الخاصيه :

Arithmetic Overflow / Underflow بـ false

أى أنك تكتب بنفسك كلمة checked في حالة أنه من الممكن أن تغير أو يغير أحدهم هذه الخاصيه السابقه بجعلها false.

فالأساس هو checked على كل التعبيرات الموجوده البرنامج حتى تمسك OverflowException , واذا أردت عدم الامساك بـه في بعض التعبيرات وفي أجزاء معينه في الكود فاستخدم كلمة unchecked. وطبعا كان سيكون أمر صعب وشاق على المبرمجين أن يكتبوا كلمة checked في كل جزء في الكود حتى يمسكوا بالـ OverflowExceptions التي يمكن أن تحدث دائما والتي من المهم جدا أن يتم الامساك بها والتعامل معها! ولذلك جعلوها كلمه تلقائيه وتركوا لنا الأمر أن نغير ذلك من خلال الخاصيه السابقه أو من خلال كلمات اضافيه نضيفها للكومبايلر اذا كنا لا نستخدم الفيجوال ستوديو.

أما اذا كان الأساس في برنامجك هو عدم الامساك بالـ OverflowExceptions الا في بعض الأجزاء , فاجعل الخاصيه السابقه بـ false ,, واستخدم checked فقط عندما تريد أن تمسك بهم. وأنا لا أتصور برنامج يكون الطبيعي عنده هو عدم الامساك بالـ OverflowExceptions.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#5
اقتباس
الـ Default هو استخدام checked

أعتقد أن الDefault هو عدم إستخدام الcheckec يعنى يتم تجاهل أى overflow فى العمليات الحسابية

تعالى نشوف مثال بسيط يوضح الكلام دة مثلا لو حبيت أجمع رقمين من النوعbyte وإحنا عارفين أن القيمة العظمى للbyte = 255

وبالتالى لو جمعت رقمين a =100 , b = 200

وبالتالى المفترض أن ناتج الجمع 300 ولكن ناتج الجمع أكبر من القيمة العطمى وبالتالى سيتم طرحها من 256 وبالتالى الناتج عبارة عن 44

كما موضح فى الكود

static void Main(string[] args)
        {
            byte a = 100;
            byte b = 200;
            try
            {
                
                    byte c = ((byte)(a + b));
                    Console.WriteLine("the Result is {0}", c);
                

            }
            catch (OverflowException EX)
            {

                Console.WriteLine(EX.Message);
            }

            Console.Read();
        }

حيث الtry-catch لم تمسك ذلك الoverflow الناتج

أما فى حالة وضع عملية الجمع ما بين checked كما موضح وبالتالى سيتم throw للOverflowException وسيتم إمساكة عن طريق الcatch block

 byte c = checked((byte)(a + b));
                    Console.WriteLine("the Result is {0}", c);

وبالتالى سيتم طباعة Message دالة على الOverFlowException

وبالتالى الكودين مختلفين وأيضا الdefault ليس checked

أكيد ممكن أخلى الdefault عبارة عن checked عن طريق

كليك يمين على إسم المشروع وإختيار properities ومنها نختارBuild ثم نضغط على Advanced button ومنها نختار

check for arithmetic overflow/underflow كما موضح فى الصورة

30_03_06_09_26_40_1143739600untitled.JPG

ولو حبيت عدم عمل check على عملية معينة أستخدم الunchecked كما قال الاخ معتز :)

تم تعديل هذه المشاركة بواسطة eng_3llam في 31 مارس 2006 في 12:01

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#6

أنا آسف تداخلت علي بعض الأمور , فكلام علام صحيح حول أن checked الخاصه بالـ Runtime غير افتراضيه في الـ Compiler ,, ولكن checked الخاصه بالـ Compiletime هى الافتراضيه بالنسبه للـ Compiler في حالة الـ CompileTime. فاذا كانت القيم Constant فالـ Compiler لا يقوم بدوره ويعطي Error ليخبرك بأنه يوجد Overflow.

مثلا :

const int intOne = 100000;
const int intTwo = 100000;
int intThree = intOne*intTwo;

// OR

int MyInt = 100000*100000;

// OR

.. etc

فالـ Compiler هنا يرفض القيام بعمل Compile للكود وذلك لأنه بطريقه افتراضيه يضع checked .. واذا كنا نريد عمل Compile يجب علينا وضع unchecked.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#7

جزاكما الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

هذا الموضوع مغلق.

مواضيع مشابهة