In the beginning, there was code:
public abstract class A
{
private string _someValue;
public string SomeValue
{
get
{
if (_someValue == null)
_someValue = GetValue();
return _someValue;
}
}
protected virtual string GetValue() { /* logic */ }
}
public class B : A
{
protected override string GetValue()
{
return base.GetValue() + GetMoreValue();
}
private string GetMoreValue() { /* logic */ }
}
And the code said, "Let there be bugs!" and there were bugs.
Seriously now.
I have an instance of B, and when I get SomeValue, I get the same SomeValue of A, without the MoreValue.
The even weirder part came when I put a breakpoint on SomeValue's Get method:
It turns out that _someValue gets its value before the Get method is ever called.
Something is very wrong here.
UPDATE:
Thanks for the comments! Shortened code, and added forgotten return type in B method.
It turns out I was making a stupid mistake.
(I would delete the question, but I figured others can learn from my blooper.)
I had a watch on
SomeValue.The result?
Get SomeValuewas called the moment I started debugging.(Which is a little weird, because I had a breakpoint on the
Getmethod which didn't activate. For some reason,watches don't trigger breakpoints.)*(As for the wrong value, that had nothing to do with inheritance -
GetMoreValuesimply happened to return an empty string.)