Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Proměnná: Nestálé pole nemůže být typu type 'type'
Pole deklarovaná pomocí klíčového volatile slova musí být jedním z následujících typů:
Libovolný typ odkazu.
Libovolný typ ukazatele (v
unsafekontextu).Typy
sbyte, ,byte,short,ushortint,floatuintchar, .boolVýčtové typy založené na některém z uvedených typů.
Následující ukázka vygeneruje CS0677:
// CS0677.cs
class TestClass
{
private volatile long i; // CS0677
public static void Main()
{
}
}
Možná alternativní řešení
V některých scénářích můžete místo alternativního řešení pro CS0677 použít nint celé číslo s nativní velikostí long . Typ nint je zaručen pro podporu atomového přístupu a dá se použít s klíčovým slovem volatile :
class TestClass
{
private volatile nint i; // This compiles successfully
public static void Main()
{
}
}
Typ nint je celé číslo v nativní velikosti, které je 32bitové na 32bitových platformách a 64bitové na 64bitových platformách. Na 64bitových platformách má stejnou velikost a rozsah jako long, ale je navržený tak, nint aby zajistil atomický přístup. Toto alternativní řešení je nejvhodnější v těchto případech:
- Váš kód cílí na 64bitové platformy, kde
nintposkytuje stejný rozsah jakolong. - Potřebujete atomický přístup k velké celočíselné hodnotě ve vícevláknovém kontextu.
- Pro váš případ použití je přijatelné chování celočíselné velikosti specifické pro platformu.
Další informace o celočíselných číslech nativní velikosti naleznete v tématu Integrální číselné typy.
Jako obecné pokyny k programování bezpečnému pro přístup z více vláken zvažte použití Interlocked operací nebo lock příkazu místo volatile polí.