Yanıtlar:
Bir const
nesne her zaman vardır static
.
Gönderen C # dili şartname (PDF sayfa 287 - veya PDF 300. sayfasında):
Sabitler statik üyeler olarak kabul edilmelerine rağmen, sabit bir bildirim statik bir değiştiriciye ne ihtiyaç duyar ne de izin verir.
Bir sabit eleman, derleyici tarafından statik olarak kabul edilir ve sabit değer semantiği anlamına gelir; bu, sabite yapılan referansların, üyeye referans yerine sabit üyenin değeri olarak kullanım koduna derlenebileceği anlamına gelir.
Başka bir deyişle, 10 değerini içeren bir const üyesi, const üyesine bir referans yerine, 10 sayısı olarak kullanan koda derlenebilir.
Bu, her zaman alana bir başvuru olarak derlenecek olan statik bir salt okunur alandan farklıdır.
Not, bu JIT öncesi. JIT'ter devreye girdiğinde, her ikisini de hedef kodda değerler olarak derleyebilir.
C # 'ler const
Java ile aynı şeydir final
, kesinlikle her zaman hariç static
. Kanımca, bir const
değişkenin olmayan olması gerçekten gerekli değildir static
, ancak bir const
değişkene olmayan bir şekilde erişmeniz gerekiyorsa static
şunları yapabilirsiniz:
class MyClass
{
private const int myLowercase_Private_Const_Int = 0;
public const int MyUppercase_Public_Const_Int = 0;
/*
You can have the `private const int` lowercase
and the `public int` Uppercase:
*/
public int MyLowercase_Private_Const_Int
{
get
{
return MyClass.myLowercase_Private_Const_Int;
}
}
/*
Or you can have the `public const int` uppercase
and the `public int` slighly altered
(i.e. an underscore preceding the name):
*/
public int _MyUppercase_Public_Const_Int
{
get
{
return MyClass.MyUppercase_Public_Const_Int;
}
}
/*
Or you can have the `public const int` uppercase
and get the `public int` with a 'Get' method:
*/
public int Get_MyUppercase_Public_Const_Int()
{
return MyClass.MyUppercase_Public_Const_Int;
}
}
Şimdi, bu sorunun 4 yıl önce sorulduğunu fark ettim, ancak bu tür cevaplara her türlü farklı cevaplama ve kod biçimlendirme yöntemlerini denemekten oluşan yaklaşık 2 saat çalıştığımdan beri hala gönderiyorum. :)
Ama kayıt için hala kendimi aptal gibi hissediyorum.
final
tam olarak C # gibi davranıyor readonly
ve hiç de değil const
.
MSDN'den: http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx
... Ayrıca, bir const alanı derleme zamanı sabiti olsa da , salt okunur alan çalışma zamanı sabitleri için kullanılabilir ...
Const alanlarında statik kullanmak, C / C ++ 'da tanımlanmış (#define ile) statik yapmaya çalışmak gibidir ... Derleme zamanında değeriyle değiştirildiği için, tüm örnekler için bir kez başlatılır (= statik) .