Compiler Error CS0677

'variabel': bidang volatil tidak boleh dari jenis 'type'

Bidang yang dideklarasikan dengan volatile kata kunci harus salah satu jenis berikut:

  • Jenis referensi apa pun.

  • Jenis penunjuk apa pun (dalam unsafe konteks).

  • Jenis sbyte, , byte, shortushort, int, , uint, char, float, bool.

  • Jenis enum berdasarkan salah satu jenis yang tercantum.

Sampel berikut menghasilkan CS0677:

// CS0677.cs  
class TestClass  
{  
   private volatile long i;   // CS0677  
  
   public static void Main()  
   {  
   }  
}  

Solusi potensial

Dalam beberapa skenario, Anda mungkin dapat menggunakan nint (bilangan bulat berukuran asli) alih-alih long sebagai solusi untuk CS0677. Jenis ini nint dijamin untuk mendukung akses atom dan dapat digunakan dengan volatile kata kunci:

class TestClass  
{  
   private volatile nint i;   // This compiles successfully
  
   public static void Main()  
   {  
   }  
}  

Jenisnya nint adalah bilangan bulat berukuran asli yang 32-bit pada platform 32-bit dan 64-bit pada platform 64-bit. Pada platform 64-bit, nint memiliki ukuran dan rentang yang sama dengan long, tetapi dirancang untuk menjamin akses atom. Solusi ini paling tepat ketika:

  • Kode Anda menargetkan platform 64-bit di mana nint menyediakan rentang yang sama dengan long.
  • Anda memerlukan akses atom ke nilai bilangan bulat besar dalam konteks multithreaded.
  • Perilaku ukuran bilangan bulat khusus platform dapat diterima untuk kasus penggunaan Anda.

Untuk informasi selengkapnya tentang bilangan bulat berukuran asli, lihat Jenis numerik integral.

Sebagai panduan umum tentang pemrograman aman utas, pertimbangkan untuk menggunakan Interlocked operasi atau lock pernyataan alih-alih volatile bidang.