In C# are the terms “Primitive” and “Literal” interchangeable?

前端 未结 8 718
[愿得一人]
[愿得一人] 2021-02-07 20:43

A discussion earlier today led me to question whether or not my understanding of primtives and literals is correct.


My understanding is that a literal type is spec

8条回答
  •  囚心锁ツ
    2021-02-07 21:24

    Yes, a literal is a value expressed in source code - so while VB supports date/time and XML literals, C# doesn't.

    From the C# spec, section 2.4.4:

    A literal is a source code representation of a value.

    As you say, this is unrelated to value type vs reference type - string is indeed a reference type.

    One literal which no-one has mentioned yet it null by the way...

    It's also unrelated to primitive types - from Type.IsPrimitive:

    The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single.

    ... the C# specification doesn't actually define the idea of a "primitive" type, but note that String isn't in the list above.

    In terms of literals being compile-time constants... in C# every literal has a representation which can be baked directly into the assembly; the extra literals in VB mean they're not constants as the CLR would understand them - you can't have a const DateTime for example - but they're still literals.

提交回复
热议问题