2015-02-13 11 views
9

C# sabit ondalık alanı hakkında uyarı karıştırmak ve aslında her yerde onları kullanmadan böyle bir sınıfta const değiştiricilerin bir demet yerleştirilir:C# öğreticiler bir bolluk keşfetmek süre <code>const</code> değiştirici ile deneyler yapıyordu

class ConstTesting 
{ 
    const decimal somedecimal = 1; 
    const int someint = 2; 
    ... 
} 

ConstTesting.cs (3,19): uyarı CS0414: Bu sınıf ile

, I (kullanarak csc) aşağıdaki uyarıyı almak alanı 'ConstTesting.somedecimal' atanır ama değerini hiçbir zaman kullanılmaz

Anlamıyorum ne

Sadece const decimal için uyarı almak olmasıdır. const int, siparişi ne olursa olsun, herhangi bir uyarı vermez.

Sorum şu anda, neden oluyor? Neden benim csc derleyicisi bana ilk etapta bir const uyarıyor ve o zaman daha önemlisi const int tam olarak aynı şekilde yazarken sadece bana const decimal hakkında uyarı mı? Yeryüzünde ne int ve decimal arasındaki fark bununla ilgili?

unutmayın:

    - ReSharper
    yok - Ben
    VS 2010 kullanıyorum - Ben const` benim kodunda herhangi bir yerde kullanılıyor `% 100 kesin de değilim.

+2

Tahmin edeyim. Bunun bir yerinde '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Bu oldukça şaşırtıcı, ama atandığınız bir değeri kullanmıyorsanız (bekle) atarsınız. Şaşırtıcı değil mi? –

+0

Gerçekten de hiçbir yerde gerçekten kullanmıyorum eminim. – HavelTheGreat

+0

Eminim ki öylesin! Public class Foo {const int bar = 2;} 'yi deneyiniz, göreceksiniz. –

cevap

12

Int, sabit boyutlu basit bir değer türüdür. Ondalık, ölçek nedeniyle biraz daha karmaşıktır. Kodunuzu koda, bunu şuna benzer olduğunu göreceksiniz: ondalık sabit değildir, ama bir DecimalConstant gerçek anlamı, ondalık ise mscorlib.dll, nezaket özellik vardır

[DecimalConstant(0, 0, 0, 0, 1)] 
private readonly static decimal somedecimal; 

private const int someint = 2; 

: Bu konunun

public struct Decimal : IFormattable, IComparable, IConvertible, 
IDeserializationCallback, IComparable<decimal>, IEquatable<decimal> 

Çok daha derinlemesine araştırma this blog post kaplıdır.

+0

Bu, “const decimal” değerinin değerinin değiştirilmesinin const int 'değerinin değiştirilmesi gibi bir kırılma değişikliğidir. – tia

+2

Bu ilginç. Yani, “const decimal” kullanarak aslında “real” 'const' değil mi? Ayrıca, sadece bana bir aptal olduğumu ve '' birşey '' bir yerimi kullandığını söylemediğin için çok teşekkürler. – HavelTheGreat

+0

Bu teknik olarak doğru. DecimalConstant özniteliği, sabit bir davranışı zorlamalıdır, ancak işleri basit tutmak için biraz duman ve aynalar. Sorunuz, ilk bakışta göründüğü gibi biraz daha karmaşıktı. Elbette çözüm, sabitlerinizi kullanmaktır. :) – aRBee