accéder aux membres non publics

la programmation

[ad_1]

Comment accédons-nous aux membres non publics ?

J’ai un objet appelé doseSuggestiions qui a un membre non public appelé “fréquences”.

Je veux accéder au même.

S’il vous plaît, aidez-moi avec ça

Solution 1

Fondamentalement, nous avons 4 modificateurs d’accès en C#. public, protégé, interne et privé. Voici les définitions de chaque modificateur :

1. Le publique [^] Le mot-clé est un modificateur d’accès pour les types et les membres de type. L’accès public est le niveau d’accès le plus permissif. Il n’y a aucune restriction sur l’accès aux membres publics.

2. Le protégé[^] Le mot-clé est un modificateur d’accès aux membres. Un membre protégé est accessible depuis la classe dans laquelle il est déclaré, et depuis toute classe dérivée de la classe qui a déclaré ce membre.

3. Le interne[^] Le mot-clé est un modificateur d’accès pour les types et les membres de type. Les membres internes sont accessibles uniquement dans les fichiers du même assembly. L’accès interne est couramment utilisé dans le développement basé sur les composants, car il permet à un groupe de composants de coopérer de manière privée sans être exposé au reste du code de l’application. Par exemple, un cadre de création d’interfaces utilisateur graphiques pourrait fournir des classes Control et Form qui coopèrent en utilisant des membres disposant d’un accès interne. Étant donné que ces membres sont internes, ils ne sont pas exposés au code qui utilise le framework.

4. Le privé[^] Le mot-clé est un modificateur d’accès aux membres. L’accès privé est le niveau d’accès le moins permissif. Les membres privés ne sont accessibles que dans le corps de la classe ou dans la structure dans laquelle ils sont déclarés.

Bref, selon la variable non publique, il existe différents niveaux d’accessibilité sur vos membres.

Solution 3

Il n’y a qu’une seule façon d’accéder aux membres non publics : la réflexion. Le problème est que cette méthode est beaucoup moins supportable. Par exemple, vous pouvez rechercher un membre par son nom, mais si vous tapez mal la chaîne ou si le nom est modifié ultérieurement, la vérification à la compilation ne vous avertira pas — vous ne trouverez pas le membre. Vous pouvez trouver tous les membres collectivement sous la forme d’un tableau polymorphe de membres ou séparément tous les champs, toutes les propriétés, tous les événements, toutes les méthodes, tous les constructeurs ou interfaces implémentées. Vous pouvez limiter la recherche aux membres publics ou non publics.

Utilisez les méthodes suivantes pour System.Type: FindInterfaces, GetInterface, GetInterfaces, GetMember, GetMembers, GetMethod, GetMethods, GetProperty, GetProperties, GetEvent, GetEvents, GetConstructorImpl, GetConstructor.

Voir http://msdn.microsoft.com/en-us/library/system.type.aspx[^].

Pour trouver des méthodes non publiques, vous devez utiliser les versions du “Get...” méthode utilisant System.Reflection.BindingFlags paramètre; utiliser System.Reflection.BindingFlags.NonPublic ou System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public

-SA

Solution 2

Créez une propriété publique, vous pourrez y accéder.

Solution 39

La réponse simple est que la nécessité d’accéder à un membre privé est un erreur, un défaut de conception.

Une stratégie utilisée pour autoriser différents niveaux d’accès aux méthodes/états internes des classes consiste à gérer les problèmes de sécurité au niveau du système d’exploitation (groupes, autorisations, utilisateurs).

Pensez à la manière dont les connexions Internet peuvent conserver les droits d’utilisateur et d’administrateur pour modifier le code ; sur la manière d’accéder à des bases de données sécurisées avec différents niveaux d’autorisation de lecture/écriture.

Une autre stratégie consiste à transmettre un code de sécurité d’un certain type au constructeur de la classe : c’est toujours un risque pour la sécurité.

Si vous n’avez pas écrit le code, vous ne pouvez pas le modifier, etc., vous êtes le piratage le code… une tâche très indésirable.

[ad_2]

コメント

Titre et URL copiés