Ça n'est même pas un type opaque, c'est une notion qui n'est pas exposée du tout dans le langage. Certains types sont des référence, c'est à dire que la VM va en réalité les traiter comme des pointeurs vers des espaces alloués sur le tas, mais il n'y a pas de moyen simple de traverser cette abstraction et de faire apparaître une notion de pointeur (dans le sens "valeur numérique qui représente l'emplacement mémoire d'une valeur"). Le but d'un langage managé c'est d'abstraire totalement la notion de pointeurs, ça serait une abstraction un peu loupée si c'était utile de la faire réapparaître aussi facilement

(bon après, ce que je dis est complètement faux en C# où on peut quand même faire apparaître une notion de pointeurs, qui n'en sont pas réellement mais y ressemblent sémantiquement déjà beaucoup plus)