7 votes

Les constantes publiques dans la bibliothèque de composants WinRT

J'ai créé un composant C# Windows Runtime, et la ligne suivante :

public const bool LOG_ENABLED = false;

lance une erreur :

Le type 'Constants' contient un champ de constante visible en externe 'Constants.LOG_ENABLED'. Les constantes ne peuvent apparaître que dans des énumérations Windows Runtime

Que signifie cette erreur ? Et comment puis-je déclarer des constantes ?

5voto

Murdock Points 2368

Ceci est une vieille question, mais je donnerai quand même mon avis. const et public est une combinaison dangereuse et souvent mal utilisée. Cela est dû au fait que si un champ public const est modifié dans une bibliothèque, la bibliothèque ne peut pas simplement être remplacée mais plutôt tous les clients de cette bibliothèque doivent être reconstruits car ils auraient copié la valeur réelle dans le client et non la référence à cette valeur.

Une option consiste à faire quelque chose comme ceci si vous voulez vraiment une "constante" publique :

public static class Constants
{   
    public static readonly bool LOG_ENABLED = false;
}

Cependant cela échoue également dans la bibliothèque de composants WinRT

'WindowsRuntimeComponent1.Constants' contient un champ visible de manière externe 'System.Boolean WindowsRuntimeComponent1.Constants.LOG_ENABLED'. Les champs ne peuvent être exposés que par des structures.

Une autre alternative qui fonctionne effectivement est

public static class Constants
{
    public static bool LOG_ENABLED { get { return false; } }
}

Je ne suis pas exactement sûr pourquoi il n'est pas possible d'avoir une const ou un readonly public dans une bibliothèque de composants WinRT alors que c'est possible dans une bibliothèque de classes normale.

Après quelques recherches, il semble que les champs publics soient limités aux structs et que les structs ne peuvent contenir que des champs publics.

Comme vous l'avez dit dans les commentaires, le changer en interne était une bonne option si vous ne l'utilisez pas à partir d'une source externe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X