爲什麼我可以調用TheFakeStaticClass.FooConst
,就像它是靜態的,當它沒有聲明爲靜態時?編譯時const字段是否轉換爲靜態字段?
在編譯時是否將const字段轉換爲靜態字段? (據我所知,你不能改變一個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;
}
}
}
好吧,它不是'靜態',因爲它不能改變。 – kenny
Thx爲所有好的答案 - 經驗教訓! – radbyx