Curious about how this self-referential code can be valid or is able to compile?
public class TestClass
{
public string TestProperty = nameof(TestProperty);
}
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
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