Почему я могу позвонить TheFakeStaticClass.FooConst
, как будто он статичен, когда он не объявлен статическим?Преобразуются ли константные поля в статические поля во время компиляции?
Поля 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