Все правильно делает. Тип указан как A, метод — виртуальный, иерархия метода кончается на B, создается подтип типа B. При вызове метода производится проверка перегрузок по иерархии наследования, где наиболее подходящая перегрузка — у класса B.
sizeof(longint) и Int32.MaxValue? sizeof же в делфи возвращает размер используемой памяти под переменную? Просто Int32.MaxValue — это два миллиарда с копейками.