سؤال

لدينا نفس التعليمات البرمجية التالية في واحدة من مشاريعنا.يمكن لأي شخص أن يشرح (في اللغة الإنجليزية بسيطة) لماذا الثابتة البيان هو مطلوب هنا ؟

class TestClass
{
    int iMyVariable;
    static void Main()
    {
        TestClass oTestClass = new TestClass();
        unsafe
        {
            fixed (int* p = &oTestClasst.iMyVariable)
            {
                *p = 9;
            }
        }
    }
}
هل كانت مفيدة؟

المحلول

إصلاح المؤشر في الذاكرة.القمامة التي تم جمعها اللغات حرية تحريك الأشياء حول الذاكرة الكفاءة.هذا هو كل شيء شفاف إلى مبرمج لأنها لا تستخدم المؤشرات في "طبيعية" CLR رمز.ومع ذلك ، عندما كنت لا تحتاج إلى مؤشرات ، ثم تحتاج إلى إصلاح في الذاكرة إذا كنت ترغب في العمل معهم.

نصائح أخرى

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

كنت في حاجة إليها في أي مكان يمكنك القيام مؤشر الحساب ، لمنع جمع القمامة من يتحرك على لك.

لأنك تعمل في وضع غير (المؤشر) ، ثابت تعليمات تخصيص مساحة الذاكرة محددة إلى هذا المتغير.إذا كنت لم يضع إصلاح التعليم في جامع القمامة يمكن أن تتحرك في الذاكرة متغير في أي مكان, عندما تريد.

نأمل أن يكون هذا مساعدة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top