Aracılığıyla paylaş


Sabit Boyutlu Arabellekler (C# Programlama Kılavuzu)

C# kullanarak sabit arabellek sabit boyutlu dizi veri yapısı oluşturmak için ifade.Başka dillerde, önceden varolan dll veya com projeleri yazılan kodu gibi varolan kodla çalışırken, bu yararlıdır.Sabit dizi öznitelik ya da normal yapı üyeleri için izin verilen değiştiriciler alabilir.The only restriction is that the array type must be bool, byte, char, short, int, long, sbyte, ushort, uint, ulong, float, or double.

private fixed char name[30];

Notlar

Dizi öğelerini içeren bir dizi bir C# yapı içermediği için C++ stil sabit boyutlu yapısı bildirmek zor erken sürümlerinde C#.Bunun yerine, yapı öğelerinin bir başvuru içerir.

C# 2.0 içinde sabit boyutlu bir dizi katıştırma olanağı eklenen bir Yapı ne zaman onu kullanılır bir güvensiz kod bloğu.

Örneğin, önce C# 2.0, aşağıdaki struct 8 bayt boyutunda olabilir.pathName Dizidir öbek ayrılmış dizi başvurusu:

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

C# 2.0 ile başlayan bir struct katıştırılmış bir dizi içerebilir.Aşağıdaki örnekte, fixedBuffer sabit boyutlu dizi vardır.Dizinin öğeleri erişmek için kullandığınız bir fixed ilk öğe için bir işaretçi oluşturmak için ifade.fixed Deyimi sabitlenir örneğini fixedBuffer bellekte belirli bir konum.

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';
                }
            }
        }
    }
}

128 Öğe boyutunu char 256 bayt dizisidir.Boyutu sabit char arabellekleri iki bayt / karakter kodlama olsun her zaman alabilir.Bu bile ne zaman char arabellekleri APİ'si yöntemlerini veya yapı ile sıralanmış doğrudur CharSet = CharSet.Auto veya CharSet = CharSet.Ansi.Daha fazla bilgi için bkz. CharSet.

Başka bir ortak sabit boyutlu dizi bool dizi.Öğeleri bir bool dizi, her zaman bir bayt boyutunda.booldiziler bit diziler veya arabellek oluşturmak için uygun değildir.

[!NOT]

Bellek kullanılarak oluşturulan haricinde stackalloc, C# derleyicisi ve ortak dil çalışma zamanı (clr) herhangi bir güvenlik arabellek taşması denetimi gerçekleştirmez.Tüm güvenli olmayan kod ile dikkatli olarak.

Güvenli olmayan arabellekleri normal dizilerden aşağıdaki şekillerde farklıdır:

  • Yalnızca güvenli olmayan arabellekleri güvensiz bir bağlamda da kullanabilirsiniz.

  • Güvenli olmayan arabellekleri vektörler ya da tek boyutlu diziler her zaman olur.

  • Dizi bildirimi gibi bir sayı içermelidir char id[8].Kullanamazsınız char id[] yerine.

  • Güvensiz arabellekler yalnızca güvensiz bir bağlamda yapılar örnek alanları olabilir.

Ayrıca bkz.

Başvuru

Güvenli Olmayan Kod ve İşaretçiler (C# Programlama Kılavuzu)

fixed Deyimi (C# Başvurusu)

Birlikte Çalışabilirlik (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu