1

Curious about how this self-referential code can be valid or is able to compile?

public class TestClass
{
  public string TestProperty = nameof(TestProperty);
}
meataxe
  • 969
  • 13
  • 33

2 Answers2

6

The nameof expression is resolved during the compilation of your program. The compiler knows the name of the property TestProperty and will substitute nameof(TestProperty) with "TestProperty".

nameof(TestProperty) has a dependency on TestProperty, but TestProperty does not have a dependency on nameof(TestProperty). Because of this, there is no circular dependency and the compiler can determine the value with no issues

Manuel
  • 584
  • 2
  • 9
0

Why wouldn't it be? It is like saying

public string TestProperty = "TestProperty";

The nameof operator works on the name of the property which is defined and unchanging, there is no recursion here. The name does not change because the value would change at runtime, nor does it depend on the value

Stilgar
  • 22,354
  • 14
  • 64
  • 101
  • I understand that it can compile, but I was curious about the mechanism by which it is valid, and the mechanism turns out to be timing (the order of operations in the compiler) as described in Manuels' answer, and possibly a misunderstanding of what my code is actually doing on my part. – meataxe Apr 18 '22 at 22:57