In delphi, che è molto OOP, per esempio esistono delle FUNZIONI che castano i dati in un tipo diverso. Giusto un esempio diverso da VB.

Mi permetto di dire che la OOP non si differenzia se utilizzo una funzione o meno. Anche perchè .tostring() è certamente un richiamo ad una funzione del compilatore che viene inheritata implicitamente, invece che richiamarla esplicitamente. Le caratteristiche dell'OOP secondo me sono l'ereditarietà e il polimorfismo e l'incapsulamento del codice e non se si utilizza una funzione esplicitamente o meno.

In un certo senso hai ragione, accedere in quel modo e come se usassi un forte incapsulamento, ma se cosi fosse quando istanzi una classe in un'altra classe questo farebbe saltare il tutto, o anche dichiarare una semplice variabile.