Только функции могут быть виртуальными. Vtable предоставляет способ найти правильное переопределение для функции, но к переменным обращаются напрямую без каких-либо косвенных указаний, как при использовании виртуальной таблицы.
Если вы хотите сделать что-то похожее на переопределение переменной-члена, то ближе всего вы получите функцию свойства. например,
class Foo
{
@property string s() { return _s; }
private string _s = "foo";
}
class Bar : Foo
{
override @property string s() { return _s; }
private string _s = "bar";
}
void main()
{
import std.stdio;
Foo bar = new Bar;
writeln(bar.s);
}