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 réflexion comme toute autre méthode. La différence est que la valeur renvoyée sera recopiée dans le tableau de paramètres afin que vous puissiez y accéder à partir de la fonction appelante.
object[] args = new object[] { address, request };
_DownloadDataInternal.Invoke(this, args);
request = (WebRequest)args[1];