ثابت حجم المخازن المؤقتة (البرمجة C# إرشادات)

في C#, يمكنك استخدام العبارة ثابتة لإنشاء مخزن مؤقت مع صفيفة الحجم ثابت في بنية بيانات. ويكون هذا مفيداً عند العمل مع تعليمات برمجية موجود، مثل تعليمات برمجية المكتوبة بلغات غير ذلك، موجودة مسبقاً لملفات DLL أو COM مشاريع. يمكن أن يستغرق صفيفة ثابت أية السمات أو المعدلات المسموح بها لأعضاء بنية العادية. The فقط restriction هو that the صفيفة نوع must bebool,byte, char, short,int,long,sbyte,ushort,uint,ulong,float, أوdouble.

private fixed char name[30];

ملاحظات

في الإصدارات السابقة من C#، التصريح بنية ذات الحجم ثابت النمط C + + تم صعبة بسبب C# البنية التي تحتوي على صفيفة لا يحتوي على عناصر الصفيف. بدلاً من ذلك، بنية على مرجع إلى العناصر.

C# 2.0 تمت الإضافة the ability إلى يضمّن an مصفوفه من ثابت الحجم في a بنية when it هو used في an غير آمن تعليمات برمجية حظر.

For مثال, قبل C# 2.0, the following struct would be 8 وحدات البايت في الحجم. The pathName صفيفة هو a مرجع إلى the كومة ذاكرة مؤقتة-allocated صفيفة:

    public struct MyArray
    {
        public char[] pathName;
        private int reserved;
    }

يبدأ بـ C# 2.0, a struct can contain an embedded صفيفة. في the following مثال, the fixedBuffer صفيفة has a ثابت الحجم. To الوصول the عناصر of the صفيفة, you استخدم a fixed كشف to establish a مؤشر إلى the أول عنصر. The fixed كشف pins an مثيل of fixedBuffer إلى a specific الموقع في ذاكرة.

namespace FixedSizeBuffers
{
    internal unsafe struct MyBuffer
    {
        public fixed char fixedBuffer[128];
    }

    internal unsafe class MyClass
    {
        public MyBuffer myBuffer = default(MyBuffer);
    }

    internal class Program
    {
        static void Main()
        {
            MyClass myC = new MyClass();

            unsafe
            {
                // Pin the buffer to a fixed location in memory.
                fixed (char* charPtr = myC.myBuffer.fixedBuffer)
                {
                    *charPtr = 'A';
                }
            }
        }
    }
}

The الحجم of the 128 عنصر char صفيفة هو 256 وحدات البايت. ثابت الحجم حرف buffers دوماً take الثاني وحدات البايت per character, regardless of the ترميز. This هو صحيح even when حرف buffers are marshaled إلى API وظائف أو بنيات مع CharSet = CharSet.Auto أو CharSet = CharSet.Ansi. لمزيد من المعلومات، راجع CharSet.

Another عام ثابت-الحجم صفيفة هو the bool صفيفة. The عناصر في a bool صفيفة are دوماً واحد بايت في الحجم. bool arrays are not appropriate for creating بت arrays أو buffers.

ملاحظة

Except for ذاكرة تاريخ الإنشاء بواسطة using stackalloc, the C# compiler و the وقت تشغيل اللغة العامة (CLR) do not perform أي الأمان احتياطي overrun checks. كـ مع الجميع غير آمن تعليمات برمجية, استخدم caution.

غير آمن buffers differ من عادي arrays في the following ways:

  • You can فقط استخدم غير آمن buffers في an غير آمن سياق.

  • غير آمن buffers are دوماً vectors, أو واحد-dimensional arrays.

  • The إعلان of the صفيفة should تضمين a العدد, such كـ char id[8]. You cannot استخدم char id[] instead.

  • غير آمن buffers can فقط be مثيل حقول of بنيات في an غير آمن سياق.

راجع أيضًا:

المرجع

التعليمات البرمجية الغير آمنة والمؤشرات (دليل البرمجة لـ #C)

الكشف الثابت (مرجعC#)

إمكانية التشغيل التفاعلي (إرشادات البرمجة لـ C#)

المبادئ

دليل البرمجة لـ #C