Bufory o ustalonym rozmiarze (Przewodnik programowania w języku C#)

W języku C#, można użyć stałej instrukcji do utworzenia buforu z tablicy stałych rozmiarach w strukturze danych.Jest to przydatne, gdy użytkownik pracuje z istniejącym kodem, takich jak kodu napisanego w innych językach, wcześniej bibliotek DLL lub COM projektów.Tablica stałych można wykonać żadnych atrybutów lub modyfikatorów, które są dozwolone dla regularnych struct członków.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];

Uwagi

We wczesnych wersjach języka C# deklarując struktury o zmiennym rozmiarze styl C++ został trudne, ponieważ struct języka C#, która zawiera tablicę nie zawiera elementów tablicy.Zamiast tego struktura zawiera odwołania do elementów.

C# 2.0 dodaje możliwość osadzania tablicy o ustalonym rozmiarze w struct gdy jest ono używane w niebezpieczne bloku kodu.

Na przykład przed C# 2.0, następujące struct byłoby rozmiar 8 bajtów.pathName Tablica jest to odwołanie do tablicy przydzielonej sterty:

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

Począwszy od języka C# 2.0, struct może zawierać tablicę osadzonych.W poniższym przykładzie fixedBuffer tablica ma stały rozmiar.Aby uzyskać dostęp do elementów tablicy, należy użyć fixed instrukcji w celu ustanowienia wskaźnik do pierwszego elementu.fixed Instrukcji połączeniowymi wystąpienie fixedBuffer do określonej lokalizacji w pamięci.

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

Rozmiar 128 elementu char tablica jest 256 bajtów.Ustalony rozmiar char buforów zawsze podjąć dwa bajty na znak, niezależnie od kodowania.Ta zasada obowiązuje nawet kiedy char bufory są przekazywane międzyprocesowo do metod interfejsu API lub struktur z CharSet = CharSet.Auto lub CharSet = CharSet.Ansi.Aby uzyskać więcej informacji, zobacz CharSet.

Innym wspólnej tablicy stałym rozmiarze jest bool tablicy.Elementy w bool tablicy są zawsze jeden bajt rozmiaru.booltablice nie są odpowiednie dla tworzenia bit tablic lub buforów.

[!UWAGA]

Z wyjątkiem dla pamięci utworzone za pomocą stackalloc, kompilator C# i środowiska common language runtime (CLR) nie należy wykonywać wszelkie kontrole przekroczenia buforu zabezpieczeń.Podobnie jak w przypadku niebezpieczny kod, należy zachować ostrożność.

Bufory niebezpieczne różnią się od regularne tablice w następujący sposób:

  • Bufory niebezpieczne można używać tylko w kontekście niebezpieczne.

  • Bufory niebezpieczne są zawsze wektorów lub tablice jednowymiarowe.

  • Deklaracja tablicy powinny obejmować count, takich jak char id[8].Nie można użyć char id[] zamiast.

  • Bufory niebezpieczne może być tylko wystąpienia pól struktur w kontekście niebezpieczne.

Zobacz też

Informacje

Niebezpieczny kod i wskaźniki (Przewodnik programowania w języku C#)

fixed — Instrukcja (odwołanie w C#)

Współdziałanie (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#