Aller au contenu

ref struct

Contexte : ref struct est une structure qui réside uniquement sur la pile et ne peut pas être allouée sur le tas. Utilisée pour les scénarios haute performance (ex. Span<T>).

public ref struct Buffer
{
private Span<byte> _data;
public Buffer(Span<byte> data) => _data = data;
public void Write(byte value) => _data[0] = value;
}
  • Ne peut pas être boxée (pas de conversion object)
  • Ne peut pas être utilisée comme champ dans une classe ou une structure non ref
  • Ne peut pas implémenter d’interface
  • Ne peut pas être utilisée dans des méthodes async (ne peut pas être capturée par une lambda ou une machine à états async)

Analyse syntaxique sans allocation : Utilisez ref struct avec Span<char> pour analyser du CSV ou du JSON sans allouer de chaînes sur le tas.

Exemple : System.Span<T> est lui‑même une ref struct. De même, Utf8JsonReader dans System.Text.Json est une ref struct pour l’analyse JSON haute performance.