Why does the following code outputs "STRING_PART_1\STRING_PART_2"
class Program
{
static void Main(string[] a)
{
Console.WriteLine(DummyClass.Property1);
}
}
internal class DummyClass
{
public static string Property1 => "STRING_PART_1\\" Property2;
public static string Property2 => "STRING_PART_2";
}
But the following code outputs "STRING_PART_1" ?
class Program
{
static void Main(string[] a)
{
Console.WriteLine(DummyClass.Property1);
}
}
internal class DummyClass
{
public static string Property1 = "STRING_PART_1\\" Property2;
public static string Property2 = "STRING_PART_2";
}
What difference should I expect using an attribute (=
) rather than an expression =>
?
CodePudding user response:
This code:
public static string Property1 => "STRING_PART_1\\" Property2;
is equivalent to this:
public static string Property1
{
get => "STRING_PART_1\\" Property2;
}
So when you access this property the getter is called (which calls the getter of Property2
inside).
These are not even properties - fields (not really matters in your case):
public static string Property1 = "STRING_PART_1\\" Property2;
public static string Property2 = "STRING_PART_2";
The initialization order is: Property1
then Property2
.
When you initialize Property1
the Property2
is not initialized yet (null
) and this is the reason of your output.
When you change the declaration order to:
public static string Property2 = "STRING_PART_2";
public static string Property1 = "STRING_PART_1\\" Property2;
you'll get desired result because Property2
is initialized before Property1
.
CodePudding user response:
When you switch Property2
with Property1
while using =
it will output STRING_PART_1\STRING_PART_2
.
So the lambda expressions ignoring the order of the variables while the normal operations are not.