Est-il un bon moyen pour une fonction en ligne pour accéder aux valeurs privées ou internes?

StackOverflow https://stackoverflow.com/questions/4824536

  •  26-10-2019
  •  | 
  •  

Question

Je viens de croiser un problème: quand je tente d'accéder à une valeur privée ou interne d'une fonction en ligne, je reçois l'erreur « La valeur « xxx » a été marquée en ligne, mais ses marques de mise en œuvre l'utilisation d'une fonction interne ou privée n'est pas suffisamment accessible ». Bien que logique, je me demande si quelqu'un a un bon travail autour. La meilleure chose que je peux penser à faire est de placer les valeurs du public dans un module imbriqué et espérons seulement que personne ne va farfouillé (que je ne suis pas trop inquiet de toute façon, étant donné que ces valeurs sont immuables). Je suppose la réflexion est une option, mais sans être en mesure d'appels cache (en utilisant ... délégataires privés) la baisse de performance est trop.

Était-ce utile?

La solution

Réponse courte:. Non, puisque la valeur sera inséré en ligne dans l'appel site, il ne peut pas utiliser des valeurs privées et il n'y a pas de véritable moyen de travailler autour d'elle

Deuxième réponse: si vous ne me dérange pas d'écrire du code incroyablement laid et vous pouvez gérer les frais généraux de quelques appels de méthode par utilisation, une alternative serait de créer une implémentation dynamique (par exemple OperatorIntrinsics.AbsDynamicTableImpl dans la bibliothèque de base), qui peut être privé. Vous pouvez ensuite envelopper la mise en œuvre de dynamique dans une méthode générique opaque du public (par exemple OperatorIntrinsics.AbsDynamic<'T>), puis créez une valeur en ligne qui ajoute les contraintes de type et remet à la mise en œuvre de dynamique (par exemple let inline abs< ^t when ^t : (static member Abs : ^t -> ^t)> x = AbsDynamic x). Maintenant, quand vous en ligne vous voyez abs juste un appel à AbsDynamic mais aucun des détails supplémentaires sur la mise en œuvre. Dans la plupart des cas, je pense que ce soit une solution bien pire que de simplement faire votre public au lieu de la valeur privée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top