Je souhaite accéder au membre protégé d'une classe. Y a-t-il un moyen simple?Comment lire un membre protégé
Répondre
Il y a deux façons:
- créer une sous-classe de la classe dont les membres protégés que vous souhaitez accéder.
- Utiliser la réflexion.
# 1 ne fonctionne que si vous contrôlez qui crée les instances de la classe. Si une instance déjà construite vous est remise, alors # 2 est la seule solution viable.
Personnellement, je m'assurerais que j'ai épuisé tous les autres mécanismes possibles de mise en œuvre de votre fonctionnalité avant de recourir à la réflexion, cependant.
Si vous pouvez dériver de la classe qui a ce membre protégé que vous pouvez y accéder.
En ce qui concerne l'utilisation de la réflexion, this might help.
Avez-vous choisi le bon accessoire pour votre membre?
- protected (C# Reference);
- public (C# Reference);
- private (C# Reference);
- internal (C# Reference).
- Vous pouvez également combiner interne avec protégé.
Par tous les moyens, le protégé accesseur précise qu'un membre est accessible uniquement dans une classe dérivée. Donc, si votre objectif est d'y accéder en dehors d'une classe dérivée, peut-être devriez-vous plutôt envisager d'utiliser le public ou interne accesseur !? En outre, cela est possible jusqu'à Reflection (C# and Visual Basic).
D'autre part, si vous voulez vraiment exposer les protégées membres d'une classe, je voudrais essayer d'utiliser publics membres et en retournant une référence à la protégée à travers elle.
Mais s'il vous plaît, posez-vous la question si votre conception est bonne avant d'exposer protégés membres. Ça me ressemble comme une odeur de design.
J'ai parfois eu besoin de faire exactement cela. Lors de l'utilisation de WinForms, il existe des valeurs dans les classes système auxquelles vous souhaitez accéder, mais qui ne le peuvent pas parce qu'elles sont privées. Pour contourner cela, j'utilise la réflexion pour y avoir accès. Par exemple ...
// Example of a class with internal private field
public class ExampleClass
{
private int example;
}
private static FieldInfo _fiExample;
private int GrabExampleValue(ExampleClass instance)
{
// Only need to cache reflection info the first time needed
if (_fiExample == null)
{
// Cache field info about the internal 'example' private field
_fiExample = typeof(ExampleClass).GetField("example", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField);
}
// Grab the internal property
return (int)_fiExample.GetValue(instance);
}
- 1. Comment accéder au membre protégé
- 2. Impossible d'accéder membre protégé 'object.MemberwiseClone()
- 3. Accès protégé membre d'une classe dans une classe dérivée
- 4. lire le mot de passe protégé excel en python
- 5. prioritaire protégé interne avec protégé!
- 6. Pourquoi la réflexion peut-elle accéder à un membre protégé/privé de la classe en C#?
- 7. ne peut pas accéder à un membre protégé ... sans sous-classe de python de
- 8. Windows protégé mode - mémoire
- 9. Comment conserver la mémoire du processus protégé
- 10. Comment initialiser un membre statique
- 11. héritage protégé
- 12. Java: accès protégé entre paquets
- 13. sizeof un membre struct
- 14. Comment savoir si un classeur Excel est protégé
- 15. Comment créer un fichier pdf protégé par mot de passe
- 16. comment lire un fichier
- 17. Comment lire un plist?
- 18. Exécution d'applications .net sur un réseau protégé
- 19. Dois-je créer un constructeur protégé pour mes classes singleton?
- 20. Pourquoi un membre de superclasse protégé n'est pas accessible dans une fonction de sous-classe lorsqu'il est passé en argument?
- 21. Puis-je rendre public un membre protégé en Java? Je veux accéder à partir d'une sous-classe
- 22. Comment accéder à un objet membre
- 23. Comment initialiser un shared_ptr membre d'une classe?
- 24. Comment initialiser un tableau membre d'un UITableViewController?
- 25. Création d'un lien protégé
- 26. IE mode protégé problème?
- 27. Référencer un membre d'un membre dans le modèle
- 28. protégé/privé - pourquoi s'embêter?
- 29. Lire le fichier excel protégé par mot de passe en utilisant OLEDB en C#
- 30. ASP.NET Lire des fichiers à partir d'un partage réseau protégé par mot de passe
La plupart du temps, il est protégé pour une raison ... –
Quelle est la relation entre la classe où vous l'avez accès à la classe avec le membre protégé? – MerickOWA
@Mehrdad Afshari: Et quand ce n'est pas que nous devons le pirater à droite?:) Les mauvais designs sont parfois hors de notre contrôle. –