Vous avez posé cinq questions là-dedans. Je vais répondre à la première :
Le fait d'avoir tous les champs en lecture seule dans une classe ne rend pas nécessairement l'instance de cette classe immuable, car il existe des "moyens" de modifier les valeurs des champs en lecture seule, même après la construction. Comment ?
Est-il possible de modifier un champ en lecture seule après sa construction ?
Oui, si vous avez suffisamment confiance en vous pour enfreindre les règles de la lecture seule. .
Comment cela fonctionne-t-il ?
Chaque bit de mémoire utilisateur dans votre processus est mutable. Des conventions telles que les champs en lecture seule peuvent donner l'impression que certains éléments sont immuables, mais si vous vous donnez du mal, vous pouvez les faire muter. Par exemple, vous pouvez prendre une instance d'objet immuable, obtenir son adresse et modifier directement les bits bruts. Cela peut nécessiter une grande ingéniosité et une connaissance des détails de la mise en œuvre interne du gestionnaire de mémoire, mais d'une manière ou d'une autre, le gestionnaire de mémoire parvient à modifier cette mémoire, donc vous le pouvez aussi si vous vous donnez la peine. Vous pouvez également utiliser la "réflexion privée" pour casser diverses parties du système de sécurité si vous avez suffisamment confiance en vous.
Par définition, un code entièrement fiable est autorisé à enfreindre les règles du système de sécurité. . C'est ce que signifie "confiance totale". Si votre code entièrement fiable choisit d'utiliser des outils tels que la réflexion privée ou le code non sécurisé pour enfreindre les règles de sécurité de la mémoire, le code entièrement fiable est autorisé à le faire.
Ne le faites pas. C'est dangereux et déroutant. Le système de sécurité de la mémoire est conçu pour faciliter le raisonnement sur l'exactitude de votre code ; violer délibérément ses règles est une mauvaise idée.
Alors, est-ce que "readonly" est un mensonge ? Eh bien, supposons que je vous dise que si tout le monde obéit aux règles tout le monde a droit à une part de gâteau. Le gâteau est-il un mensonge ? Cette affirmation est no l'affirmation "vous aurez une part de gâteau". C'est l'affirmation que si tout le monde obéit aux règles tu auras une part de gâteau. Si quelqu'un triche et prend votre part, pas de gâteau pour vous.
Un champ en lecture seule d'une classe est-il en lecture seule ? Oui mais seulement si tout le monde obéit aux règles . Les champs en lecture seule ne sont donc pas "un mensonge". Le contrat est le suivant : si tout le monde respecte les règles du système, le champ est considéré comme étant en lecture seule. Si quelqu'un enfreint les règles, alors peut-être qu'il ne l'est pas. Cela ne fait pas de l'affirmation "si tout le monde obéit aux règles, le champ est en lecture seule" un mensonge !
Une question que vous n'avez pas posée, mais qui aurait peut-être dû l'être, est de savoir si la mention "readonly" sur les champs d'une structure est également un "mensonge". Voir L'utilisation de champs publics en lecture seule pour les structures immuables fonctionne-t-elle ? pour quelques réflexions sur cette question. Les champs en lecture seule d'une structure sont beaucoup plus mensongers que les champs en lecture seule d'une classe.
Quant au reste de vos questions, je pense que vous obtiendrez de meilleurs résultats si vous posez une question par question, plutôt que cinq questions par question.