capypad
0 Tage Serie
csharp / expert
Snippet

Ref-Felder und Scoped-Lebenszeitverfolgung

C# 11 führte 'ref fields' innerhalb von 'ref structs' ein, wodurch auf dem Stack allokierte Strukturen Referenzen auf andere Variablen halten können. Um ungültige Referenzen zu verhindern, stellt das Schlüsselwort 'scoped' sicher, dass eine Referenz die aktuelle Methode nicht verlassen oder einem Feld mit längerer Lebenszeit zugewiesen werden kann, was sicheres, pointerfreies Hochleistungs-Speichermanagement ermöglicht.

snippet.csharp
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public ref struct ReferenceTracker {
public ref int Value;
public void Update(scoped ref int newValue) {
// Error if newValue has a shorter lifetime than the struct
this.Value = ref newValue;
}
}
 
public void Process() {
int local = 10;
var tracker = new ReferenceTracker();
tracker.Update(ref local); // Valid: local lives as long as tracker
}
Erklärung
1
public ref struct ReferenceTracker
Eine reine Stack-Struktur, die ref-Felder enthalten kann (Feature ab C# 11).
2
public ref int Value;
Ein Feld, das eine Referenz auf einen Integer speichert, nicht nur den Wert.
3
scoped ref int newValue
Stellt sicher, dass die Referenz 'newValue' nicht länger lebt als der Scope des Methodenaufrufs.