Comment puis-je invoquer une méthode avec un paramètre out?

Je veux exposer la méthode WebClient.DownloadDataInternal comme ci-dessous:

[ComVisible(true)] public class MyWebClient : WebClient { private MethodInfo _DownloadDataInternal; public MyWebClient() { _DownloadDataInternal = typeof(WebClient).GetMethod("DownloadDataInternal", BindingFlags.NonPublic | BindingFlags.Instance); } public byte[] DownloadDataInternal(Uri address, out WebRequest request) { _DownloadDataInternal.Invoke(this, new object[] { address, out request }); } } 

WebClient.DownloadDataInternal a un paramètre out, je ne sais pas comment l’invoquer. Aidez-moi!

 public class MyWebClient : WebClient { delegate byte[] DownloadDataInternal(Uri address, out WebRequest request); DownloadDataInternal downloadDataInternal; public MyWebClient() { downloadDataInternal = (DownloadDataInternal)Delegate.CreateDelegate( typeof(DownloadDataInternal), this, typeof(WebClient).GetMethod( "DownloadDataInternal", BindingFlags.NonPublic | BindingFlags.Instance)); } public byte[] DownloadDataInternal(Uri address, out WebRequest request) { return downloadDataInternal(address, out request); } } 

Vous appelez une méthode avec un paramètre out via la reflection, comme toute autre méthode. La différence est que la valeur renvoyée sera recopiée dans le tableau de parameters afin que vous puissiez y accéder depuis la fonction appelante.

 object[] args = new object[] { address, request }; _DownloadDataInternal.Invoke(this, args); request = (WebRequest)args[1];