Jetez un oeil à setAccessible - un moyen en Java pour vous permettre d'appeler des méthodes privées par réflexions. Pourquoi .NET n'a-t-il pas encore implémenté une telle fonctionnalité?Pourquoi n'y a-t-il pas de parallèle avec setAccessible de Java dans .NET?
Répondre
Here est un exemple de le faire dans .NET
using System;
using System.Reflection;
using System.Collections.Generic;
public class MyClass
{
public static void Main()
{
try
{
Console.WriteLine("TestReflect started.");
TestReflect test = new TestReflect();
Console.WriteLine("TestReflect ended.");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
ConsoleKeyInfo cki;
do
{
Console.WriteLine("Press the 'Q' key to exit.");
cki = Console.ReadKey(true);
} while (cki.Key != ConsoleKey.Q);
}
}
public class TestReflect
{
public TestReflect()
{
this.GetType().GetMethod("PublicMethod").Invoke(this, null);
this.GetType().GetMethod("PrivateMethod", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(this, null);
}
public void PublicMethod()
{
Console.WriteLine("PublicMethod called");
}
private void PrivateMethod()
{
Console.WriteLine("FTW!one1");
}
}
Je pense que « pourquoi » pourrait être un peu d'une question spéculative, mais si vous êtes à la recherche d'un moyen de tester des méthodes privées, je pense vous serez en mesure de le faire plus facile avec .NET 4.0:
http://bugsquash.blogspot.com/2009/05/testing-private-methods-with-c-40.html
vous pouvez utiliser la réflexion pour appeler des méthodes privées, qu'il ne soit pas aussi simple que d'appeler les méthodes publiques. Nous avons fait cela avant pour les tests unitaires et ont utilisé les postes suivants comme comment faire référence:
http://www.emadibrahim.com/2008/07/09/unit-test-private-methods-in-visual-studio/
http://johnhann.blogspot.com/2007/04/unit-testing-private-methods.html
Il est tout à fait possible dans .NET d'avoir accès à quoi que ce soit de réflexion à l'aide privée .
accès à obtenir par exemple une méthode d'instance privée appelée Foo sur la barre de classe ressemblerait à ceci:
typeof(Bar).GetMethod("Foo",BindingFlags.NonPublic | BindingFlags.Instance);
il ne nécessite cependant que le code en utilisant la réflexion est entièrement confiance.
(Les exigences de sécurité seront différentes pour V4)
- 1. Java itérateur de travail parallèle?
- 2. Middleware de traitement parallèle
- 3. Programmation de port parallèle
- 4. Pourquoi l'année n'est-elle pas correcte avec SimpleDateFormat en java?
- 5. ASP.NET: ne pas télécharger le contenu parallèle
- 6. Bibliothèque parallèle CCR vs Task de Microsoft
- 7. Utilisation de Java Webservice dans .NET
- 8. java - pourquoi graphics.drawString() ne se redessine pas?
- 9. RT traitement parallèle dans Rails
- 10. Pourquoi HttpServletRequest.getRemoteAddr() ne fonctionne pas dans le servlet Java?
- 11. Pourquoi la classe de méthode Java n'est-elle pas générique?
- 12. décision de programmation Java ou .Net, db ou pas db
- 13. Windows 7 n'inclut pas .net 3.5 pourquoi?
- 14. Pourquoi BackColor ne fonctionne pas pour TabControls dans .NET?
- 15. .NET: Pourquoi la base 64 n'est-elle pas dans Encoding.GetEncodings()?
- 16. Pourquoi GetHashCode n'est pas une propriété comme HashCode dans .NET
- 17. Exécution de portions d'une boucle en parallèle avec Octave?
- 18. Pourquoi .NET ne peut-il pas analyser une chaîne de date avec un fuseau horaire?
- 19. Pourquoi pouvez-vous réfléchir et appeler une méthode (pas si) privée en Java et .Net
- 20. parallèle, mais plus lent
- 21. Pourquoi cet échantillon de StructLayout .NET pour
- 22. Intégration Java EE avec .NET pour l'authentification
- 23. Parallèle SSH en Python
- 24. Passer de .NET à Java?
- 25. Sujets "chauds" actuels dans la programmation parallèle?
- 26. Affectation parallèle en C++
- 27. Pourquoi obtenons-nous ClosedByInterruptException de FileChannel.map dans Java 1.6?
- 28. Pourquoi java ne trouve-t-il pas le framework JUnit?
- 29. Affectation parallèle et plages
- 30. L'équivalent .NET de MemoryImageSource de Java
Le lien est cassé. Cela aurait été bien si vous aviez copié les éléments utiles du site avant qu'ils ne soient supprimés, maintenant cette réponse acceptée n'est pas utile. – NightOwl888
@ NightOwl888, réparé pour vous. – Yishai