Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
'variabele': een vluchtig veld mag niet van het type 'type' zijn
Velden die zijn gedeclareerd met het volatile trefwoord, moeten een van de volgende typen zijn:
Elk verwijzingstype.
Elk type aanwijzer (in een
unsafecontext).De typen
sbyte, ,byte,ushortshort, ,int,uint,char, ,float.boolOpsommingstypen op basis van een van de vermelde typen.
In het volgende voorbeeld wordt CS0677 gegenereerd:
// CS0677.cs
class TestClass
{
private volatile long i; // CS0677
public static void Main()
{
}
}
Mogelijke tijdelijke oplossingen
In sommige scenario's kunt u mogelijk (geheel getal van systeemeigen grootte) gebruiken nint in plaats van long als tijdelijke oplossing voor CS0677. Het nint type biedt gegarandeerd ondersteuning voor atomische toegang en kan worden gebruikt met het volatile trefwoord:
class TestClass
{
private volatile nint i; // This compiles successfully
public static void Main()
{
}
}
Het nint type is een geheel getal van systeemeigen grootte dat 32-bits is op 32-bits platforms en 64-bits op 64-bits platforms. Op 64-bits platforms nint heeft deze dezelfde grootte en hetzelfde bereik als long, maar het is ontworpen om atomische toegang te garanderen. Deze tijdelijke oplossing is het meest geschikt wanneer:
- Uw code is gericht op 64-bits platforms waar
ninthetzelfde bereik wordt geboden alslong. - U hebt atomische toegang nodig tot een groot geheel getal in een context met meerdere gelezen getallen.
- Gedrag van platformspecifieke gehele getallen is acceptabel voor uw use-case.
Zie Integraal numerieke typen voor meer informatie over gehele getallen van systeemeigen grootte.
Als algemene richtlijnen voor thread-safe programmeren kunt u overwegen bewerkingen of de lock instructie te gebruiken Interlocked in plaats van volatile velden.