Объект child внутри вашей TestBase не знает, где он находится. Он не знает, что находится внутри класса.
Когда вы создаете child , вы также создаете совершенно другой объект TestBase, который отличается от того, что содержит child . При создании этого объекта a будет инициализирован значением по умолчанию, которое в данном случае равно 0.
Если вы хотите перенести значение a в другой объект, вы должны передать его ему. Например через конструктор.
Звоните так:
TestChild child = new TestChild(a);
Создайте конструктор так:
public TestChild(int x) : base(x){}
К сожалению, ваша концепция кровоточит отовсюду, поэтому она не будет работать в этой форме. Я рекомендую изучить наследство больше.