Sabit statik olarak işaretlenemez


Yanıtlar:


198

constima eder static( constdeğere başvurmak için bir örneğe ihtiyacınız yoktur ).

Şu önemli noktayı da eklemek istiyorum: a ile bir montaja bağlandığınızda (referans) public const, bu değer montajınıza kopyalanır . Dolayısıyla const, başvurulan derlemedeki değer değişirse, derlemeniz yine de orijinal derlenmiş değere sahip olacaktır.

Bu davranış kabul edilebilir değilse , alanı bir public static readonlyalan yapmayı düşünmelisiniz .

Lib.dll, ikili olarak sağlanır:

public class Foo {
    public const int HATS = 42;
    public static readonly int GLOVES = 33;
}

App.exe, Lib.dll referansları:

Foo.HATS    // This will always be 42 even if the value in Lib.dll changes,
            // unless App.exe is recompiled.

Foo.GLOVES  // This will always be the same as Foo.GLOVES in Lib.dll

Gönderen MSDN :

Herhangi bir zamanda değiştirmeyi beklediğiniz bilgileri temsil edecek bir sabit oluşturmayın. Örneğin, bir hizmetin fiyatını, ürün sürüm numarasını veya bir şirketin marka adını saklamak için sabit bir alan kullanmayın. Bu değerler zamanla değişebilir ve derleyiciler sabitleri yaydığı için, kitaplıklarınızla derlenen diğer kodların değişiklikleri görmek için yeniden derlenmesi gerekecektir.

Gönderen DotNetPerls :

DLL'ler. Bir constalan veya bildirim kullandığınızda, C # derleyicisi constdeğişkenin değerini doğrudan IL koduna gömer . Bu nedenle, esasenconst ayrı bir varlık olarak .

Dikkat: a'ya bağımlı programlar değer değiştikten constsonra yeniden derlenmezse const, bozulabilirler [ çünkü önceki değeri kullanmaya devam edecekler ].


15

Bir sabit, tanımı gereği statiktir.


bu, java'da `final 'için de uygulanıyor mu
Basheer AL-MOMANI

@ BasheerAL-MOMANI: Hayır. Yapıcı çağrısından sonra final değiştirilemez. Daha fazlası yok.
juergen d

9

Statik sabit değeriniz olamaz. Const yerine salt okunur deneyin veya "durağan" kelimesini bırakın, çünkü "const" zaten statik olarak ima edilir.


4

Sabitler çalışma zamanı değil derleme sırasında kodda değiştirilemez, bu nedenle statik vs örnek tanımlarına gerek yoktur.


3

Tüm sabit bildirimleri örtük olarak statiktir ve C # belirtimi, statik değiştiricinin (artık) dahil edilmesinin yasak olduğunu belirtir. Bunun, bir okuyucu iki sabit görmesi durumunda ortaya çıkabilecek karışıklığı önlemek için olduğuna inanıyorum, biri statik ilan edilmiş diğeri değil - şartnamedeki farklılığın anlambilimde bir farkı ifade ettiğini kolayca varsayabilirler. Bununla birlikte, bir seçimin olduğu yerde, aynı zamanda varsayılan olan bir erişim değiştiriciyi fazladan belirtme konusunda herhangi bir yasak yoktur. Örneğin, (somut) bir yöntem, varsayılan olmasına rağmen açıkça özel olarak işaretlenebilir. Kural, seçeneğin olmadığı durumlarda (örneğin, bir arayüzde bir yöntem bildirimi) fazlalık değiştiricinin yasaklanmasıdır. Bir seçeneğin olduğu yerde izin verilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.