4

TheFakeStaticClass.FooConst静的と宣言されていないのに、静的のように呼び出すことができるのはなぜですか?

constフィールドはコンパイル時に静的フィールドに変換されますか?(を変更できないことを理解しているconstので、必要なのは「1つのインスタンス」だけです。以前は多くのconstを使用していましMath.PIたが、以前は考えたことはありませんでした。今は変更し、今は興味があります。

namespace ConstTest
{
    class Program
    {
        class TheFakeStaticClass
        {
            public const string FooConst = "IAmAConst";
        }

        class TheRealStaticClass
        {
            public static string FooStatic = "IAmStatic";
        }

        static void Main()
        {
            var fc = TheFakeStaticClass.FooConst; // No error at compile time!
            var fs = TheRealStaticClass.FooStatic;
            var p = new Program();
            p.TestInANoneStaticMethod();
        }

        private void TestInANoneStaticMethod()
        {
            var fc = TheFakeStaticClass.FooConst;
            var fs = TheRealStaticClass.FooStatic;
        }
    }
}
4

4 に答える 4

10

JonSkeetから-staticとconstを一緒に使用できないのはなぜですか

All constants declarations are implicitly static, and the C# specification states that the (redundant) inclusion of the static modifier is prohibited.

于 2012-08-30T12:05:49.357 に答える
5

定数は暗黙的に静的です。

定数の考え方は、決して変更してはならず、コンパイル時に割り当てられるというものです。定数が静的でない場合、実行時に作成されます。

于 2012-08-30T12:05:45.297 に答える
2

const is as you say also static. Difference begin that const can not be changed.

于 2012-08-30T12:06:16.870 に答える
2

No. They are inlined. Meaning that each time the compiler sees the usage of the constant, it replaces the usage with the value of the constant. This is why consts must be evaluated in compile time.

于 2012-08-30T12:06:53.917 に答える