Original by Icesky 2021-08-13 21:28 采纳率: 0%
浏览 149
已结题

C# 反射调用接口类的方法和泛型传参问题

//接口
public interface IClient
public interface IRequest<out T> where T : myResponse;

//抽象类
public abstract class myResponse;

//返回类,其中一个(一个请求参数类对应一个返回类,这样有100多个)
public class myTPsGetResponse : myResponse;

//请求参数类,其中一个
public class myTPsGetRequest : IRequest<myTPsGetResponse>

//实现 ITopClient 接口
public class DefaultClient : IClient
public DefaultClient(string serverUrl, string appKey, string appSecret); //构造函数
public virtual T Execute<T>(IRequest<T> request) where T : myResponse; //方法
public virtual T Execute<T>(IRequest<T> request, string session) where T : myResponse; //方法

//正常调用,请求类实例化和调用请求方法返回结果类
myTPsGetRequest myTPs= new myTPsGetRequest ();
IClient Client = new DefaultClient();
myTPsGetResponse rsp = Client.Execute(myTPs);

现在要求必须以反射来实现整个调用过程:
//反射参数类,没有问题
Type cn = assembly.GetType(className);
object obj = Activator.CreateInstance(cn true);
//反射方法类,问题在下面
Type myType = typeof(DefaultClient);
 //这里返回始终null,不传参提示不明确的匹配,传了不报错返回null
var sType = myType.GetMethod("Execute");
 //这里入参类型要求为  ITopRequest<out T>,用上面的obj也不行,不知道要怎么传
sType = sType.MakeGenericMethod(obj.GetType());

尝试了N种方法,大部分的类和方法都可以实现反射调用没有问题,唯独这个碰到了上面问题,始终不得其解,主要是如何反射获取方法,获取后如何反射传入 ITopRequest 这个泛型参数调用方法,望指教,谢谢!

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-08-16 17:32
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    ​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 8月21日
  • 修改了问题 8月14日
  • 修改了问题 8月14日
  • 修改了问题 8月14日
  • 展开全部

悬赏问题

  • ¥15 PHPCMS在表单提交之后对某一个字段进行二次联动并显示在前台提示语上
  • ¥50 Python调用Canalyzer发报文
  • ¥15 关于使用Azure Auto ML时上传的数据无法加载MLTable问题
  • ¥15 flume采集日志信息到hdfs
  • ¥15 电脑重启发现主机转屏幕不亮
  • ¥20 yolo5 打包exe 运行报错
  • ¥15 python如何过滤应用层协议
  • ¥15 请问前端如何在企业微信内通过聊天点击链接唤起第三方app
  • ¥15 纯C++ 简单图色对比 灵敏度低的问题
  • ¥15 麒麟ARM机器安装chromium浏览器