Il primo linguaggio ad oggetti è stato Smalltalk aveva alcune caratteristiche che quasi nessun linguaggio moderno possiede ancora.
Un'importante differenza è che la classe è un oggetto. Infatti per creare una nuova classe non ho un meccanismo speciale come in C#, ma semplicemento chiamo un metodo di un oggetto.
Esempio supponiamo di voler creare la classe Dog:
Object subclass: #Dog
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'PBE'
In questo caso viene mandato il messaggio subclass (analogo alla chiamata di un metodo) all'oggetto Object. Analogamente se voglio creare un oggetto di tipo Dog manderò il messaggio new all'oggetto classe Dog.
Anche in Ruby le classi sono oggetti. Quindi il linguaggio C# è un linguaggio Class Oriented proprio per questa limitazione.
Il video Ruby for .NET developers spiega bene queste differenze prendendo come linguaggio di riferimento Ruby.