【发布时间】:2015-08-26 02:17:55
【问题描述】:
java版本: 我的通用功能如下:
public <T, K> JsonEnvelop<T, K> readResponse(Class<T> t, Class<K> k)
还有一个实现InvocationHandler的类,在invoke函数中,它会调用泛型函数,如下:
JsonEnvelop<ResHeader, ?> response = conn.readResponse(ResHeader.class, method.getReturnType());
现在我想要一个 C# 版本: 然后我将通用函数翻译如下:
public JsonEnvelop<T, K> readResponse<T,K>()
我想在实现RealProxy的类的invoke body中调用函数,如何才能达到与java版本相同的结果?第一个泛型可以是ResHeader,但是第二个要从methodCall来判断,那怎么传参数K呢?
public override IMessage Invoke(IMessage msg)
{
var methodCall = msg as IMethodCallMessage;
var response = conn.readResponse<ResHeader, Typge.Get(methodCall.TypeName)>();
return new ReturnMessage(response.getBody(), null, 0, methodCall.LogicalCallContext, methodCall);
}
另一个问题是,有没有更好的方法将 java 代码翻译成 C#?
非常感谢!
谢谢Aron,具体问题是:
我有不同的服务,对于每一个服务,它都会提供几个功能。每个函数都会发送一个请求并得到一个响应。请求和响应会因功能和服务而异。设计是使用 RealProxy 发送请求并获得响应。这里的“public JsonEnvelop readResponse(Class t, Class k)”是获取响应,对于不同的服务和功能,T和ResHeader一样,但是K不同,依赖参数。
GetRealTimeQueryDataRequest request = new GetRealTimeQueryDataRequest();
GetRealTimeQueryDataResponse response=reportService.getRealTimeQueryData(request);
以上面为例,它会调用realproxy实现类中的invoke函数,K应该是返回类型GetRealTimeQueryDataResponse
【问题讨论】:
-
Java 到 c# 工具:codecall.net/2014/03/27/…
-
您的问题是什么?我不明白你想要达到什么目的。 “但是第二个应该从methodCall判断”是什么意思?这听起来像是一个 XY 问题,而您还没有告诉我们 X 是什么或整个问题是什么,或者您是如何实现 X 的,所以我无法弄清楚您希望如何将 Y 放入解决方案中。继承 RealProxy 的整个类在做什么?
-
感谢工具推荐。我试过了,它只是简单地翻译了一些简单的特性,但无法处理通用/动态代理等复杂条件
标签: c# generics dynamic-proxy