Share via


Compilerfout CS0677

'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 unsafe context).

  • De typen sbyte, , byte, ushortshort, , int, uint, char, , float. bool

  • Opsommingstypen 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 nint hetzelfde bereik wordt geboden als long.
  • 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.