Latest web development tutorials

C # رمز غير آمنة

عندما سقطت كتلة من التعليمات البرمجية باستخدام العلامة معدلغير آمنة، C # يسمح باستخدام متغير مؤشر في الدالة.كود غير آمنة أو التعليمات البرمجية غير المدارة هو استخدام متغير كود كتلةالمؤشر.

متغير مؤشر

مؤشر هو قيمة المتغير من عنوان متغير آخر، وهي العنوان مباشرة من موقع الذاكرة.مثل المتغيرات أو الثوابت أخرى، يجب عليك استخدام المؤشر قبل تخزين متغير إعلان عنوان المؤشر الآخر.

الشكل العام لتعريف المؤشر المتغير هو:

اكتب * فار-الاسم؛

وفيما يلي تعريف المؤشر صحيح:

الباحث * الملكية الفكرية؛ / * نقطة إلى عدد صحيح * /
مزدوج * موانئ دبي؛ / * مؤشر لعدد الدقة المزدوجة * /
تطفو * تنظيم الأسرة؛ / * المؤشر إلى تعويم * /
شار * الفصل / * المؤشر إلى شار * /

يوضح المثال التالي استخدام C # باستخدام معدلغير آمنة عندما يكون المؤشر:

باستخدام نظام.
مساحة UnsafeCodeApplication
{
    برنامج الدرجة
    {
        ساكنة آمنة باطلة الرئيسي (سلسلة [] وسائط)
        {
            كثافة العمليات فار = 20؛
            الباحث * ص = & فار.
            Console.WriteLine ( "البيانات هي: {0}"، فار)؛
            Console.WriteLine ( "عنوان هو: {0}"، (الباحث) ص)؛
            Console.ReadKey ()؛
        }
    }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

البيانات هو: 20
العنوان هو: 99215364

لا يمكنك أن يعلن طريقة بأسره كود غير آمنة، إلا جزءا من حاجة للإعلان عن طريقة كرمز غير آمنة. يوضح المثال التالي هذه النقطة.

استرجاع قيم البيانات باستخدام مؤشر

يمكنك استخدام أسلوبToString () للبيانات موقف المرجعية المخزنة في المتغيرات مؤشر استرجاع.يوضح المثال التالي هذه النقطة:

باستخدام نظام.
مساحة UnsafeCodeApplication
{
   برنامج الدرجة
   {
      الفراغ ثابت العامة الرئيسية ()
      {
         غير مأمون
         {
            كثافة العمليات فار = 20؛
            الباحث * ص = & فار.
            Console.WriteLine ( "البيانات هي: {0}"، فار)؛
            Console.WriteLine ( "البيانات هي: {0}"، P-> ToString ())؛
            Console.WriteLine ( "عنوان هو: {0}"، (الباحث) ص)؛
         }
         Console.ReadKey ()؛
      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

البيانات هو: 20
البيانات هو: 20
العنوان هو: 77128984

تمرير مؤشر كوسيلة المعلمة

يمكنك تمرير متغير مؤشر كمعلمة لأسلوب النهج. يوضح المثال التالي هذه النقطة:

باستخدام نظام.
مساحة UnsafeCodeApplication
{
   الطبقة TestPointer
   {
      العام غير آمنة تبادل باطلة (الباحث * ص، الباحث ف *)
      {
         الباحث درجة الحرارة = * ع؛
         * P = * ف.
         * س = درجة الحرارة.
      }

      العام الفراغ ثابت غير آمنة الرئيسية ()
      {
         TestPointer ع = TestPointer الجديدة ()؛
         الباحث VAR1 = 10؛
         الباحث var2 = 20؛
         الباحث * س = & VAR1.
         الباحث * ذ = & var2.
         
         Console.WriteLine ( "قبل مبادلة: VAR1: {0}، var2: {1}"، VAR1، var2)؛
         p.swap (س، ص).

         Console.WriteLine ( "بعد مبادلة: VAR1: {0}، var2: {1}"، VAR1، var2)؛
         Console.ReadKey ()؛
      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

قبل مبادلة: VAR1: 10، var2: 20
بعد مبادلة: VAR1: 20، var2: 10

استخدام مؤشرات للوصول عناصر مجموعة

في C #، اسم مجموعة ومؤشر إلى مجموعة البيانات مع نفس نوع البيانات هو مؤشر إلى مختلفة أنواع متغير. على سبيل المثال، الباحث * p و كثافة العمليات [] ص هو نوع مختلف. يمكنك زيادة مؤشر متغير ص، لأنها ليست ثابتة في الذاكرة، ولكن يتم إصلاح عنوان مجموعة في الذاكرة، لذلك لا يمكنك إضافة مجموعة ص.

لذا، إذا كنت بحاجة إلى استخدام متغيرات المؤشر للوصول إلى مجموعة البيانات، كما نفعل عادة في C أو C ++ ككلمات رئيسية لاستخدام مؤشر ثابتثابت.

يوضح المثال التالي هذه النقطة:

باستخدام نظام.
مساحة UnsafeCodeApplication
{
   الطبقة TestPointer
   {
      العام الفراغ ثابت غير آمنة الرئيسية ()
      {
         كثافة [] قائمة = {10، 100، 200}؛
         ثابت (كثافة * PTR = القائمة)

         / * عرض مؤشر عنوان مجموعة * /
         ل(كثافة العمليات ط = 0؛ ط <3؛ ط ++)
         {
            Console.WriteLine ( "عنوان قائمة [{0}] = {1}"، ط، (الباحث) (PTR + ط))؛
            Console.WriteLine ( "قيمة قائمة [{0}] = {1}"، ط، * (PTR + ط))؛
         }
         Console.ReadKey ()؛
      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

عنوان القائمة [0] = 31627168
قيمة القائمة [0] = 10
عنوان قائمة [1] = 31627172
قيمة قائمة [1] = 100
عنوان القائمة [2] = 31627176
قيمة القائمة [2] = 200

ترجمة التعليمات البرمجية غير آمنة

من أجل ترجمة التعليمات البرمجية غير آمنة، يجب التبديل إلى مترجم سطر الأوامر تحديد سطر الأوامر/ غير آمنة.

على سبيل المثال، لترجمة برنامج يسمى prog1.cs تحتوي على رمز غير آمنة، أدخل الأمر في سطر الأوامر:

ديوان الخدمة المدنية / prog1.cs غير آمنة

إذا كنت تستخدم IDE البصرية ستوديو، تحتاج إلى تمكين التعليمات البرمجية غير آمنة في خصائص المشروع.

المضي قدما على النحو التالي:

  • بواسطة عقدة النقر المزدوج إكسبلورر (مستكشف الحلول) سمات (خصائص)، افتحخصائص المشروع (خصائص المشروع).
  • انقر فوق علامة التبويبإنشاء.
  • حدد الخيار"السماح كود غير آمنة".