Programowanie obiektowe Klasy w D tworzą pojedynczą hierarchię wywodzącą się z klasy Object. Język nie wspiera wielokrotnego dziedziczenia, proponując w zamian interfejsy w stylu Javy oraz domieszki, które umożliwiają przeniesienie współdzielonej funkcjonalności poza hierarchię klas.
D zmienia również sposób obsługi metod wirtualnych. Domyślnie każda metoda, która nie jest statyczna, prywatna oraz szablonowa, staje się metodą wirtualną. Kompilator analizuje hierarchię klas, określając które metody wirtualne można wywoływać statycznie oraz w jakim kontekście, co pozwala na lepszą optymalizację kodu wynikowego oraz uniknięcie wielu błędów programistycznych.
Metaprogramowanie Metaprogramowanie jest wspierane przez kombinację szablonów, wykonywania funkcji w trakcie kompilacji, krotek oraz domieszkowania tekstu. Poniższe przykłady demonstrują niektóre możliwości metaprogramowania w D.
W przeciwieństwie do C++, szablony w D bardziej przypominają funkcje.