Est-il un moyen de “contourner” une méthode de réflexion?
Sans hériter, mais seulement avec la réflexion est-il possible de modifier dynamiquement le code d'une méthode en C#?
quelque chose comme :
nameSpaceA.Foo.method1 = aDelegate;
Je ne peux pas modifier La Classe Foo.
namespace nameSpaceA
{
class Foo
{
private void method1()
{
//... some Code
}
}
}
Mon objectif final est de changer dynamicaly le code de :
public static IList<XPathNavigator> EnsureNodeSet(IList<XPathItem> listItems);
Dans Le Système.Xml.Xsl.Moment de l'exécution.XslConvert.cs
à son tour :
if (!item.IsNode)
throw new XslTransformException(Res.XPath_NodeSetExpected, string.Empty);
dans :
if (!item.IsNode)
throw new XslTransformException(Res.XPath_NodeSetExpected, item.value);
- Non, C# ne peut pas être un singe, patché, si c'est la question...
- l'émission permet que. Aussi, re-mix peut le faire aussi. C# peut être totalement singe-patché!
- a répondu au sujet de votre réponse
Vous devez vous connecter pour publier un commentaire.
La première partie de cette réponse est fausse, je ne suis qu'en la laissant telle sorte que l'évolution dans les commentaires de sens. Consultez l'ÉDITION(s).
Vous n'êtes pas à la recherche à la réflexion, mais d'émission (qui est dans l'autre sens).
En particulier, il y a une méthode qui ne fonctionne tout simplement ce que vous voulez, vous avez de la chance!
Voir TypeBuilder.DefineMethodOverride
EDIT:
L'écriture de cette réponse, je viens de me rappeler que re-mix vous permet de le faire aussi. Il est beaucoup plus difficile cependant.
Re-mix est un cadre qui "simule" mixin en C#. Dans son aspect fondamental, vous pouvez y penser comme des interfaces avec des implémentations par défaut. Si vous allez plus loin, il devient beaucoup plus que cela.
EDIT 2: Voici un exemple d'utilisation pour re-mix (mise en place de INotifyPropertyChanged sur une classe qui ne le supporte pas, et n'a aucune idée de mixin).
Et le test:
Veuillez noter que:
et
et
Ont exactement le même effet. C'est une question de l'endroit où vous souhaitez définir un mixin est appliqué à une classe particulière.
Exemple 2: le remplacement d'égal à Égal et GetHashCode
Cet exemple est de ma mise en œuvre de la hands-on lab donné avec re-mix. Vous pouvez trouver plus de renseignements.
Foo
(ce qui n'est pas nécessairement le cas)[Extends(typeof(Your_Target_Class)]
sur le mixin. Ou utiliser le[assembly: Mix(...)]
assemblée niveau de l'attribut.