当前位置 : 主页 > 网络编程 > 其它编程 >

c#–如何在强类型的接口上引用方法名称

来源:互联网 收集:自由互联 发布时间:2023-07-02
很抱歉,如果已经回答了这个问题,但我认为我实际上缺乏正式的教育来正确地提出这个问题,因此也没有正确的标准来成功地搜索它.我有一个API,有几个调用几乎相同的东西,但使用不同的
很抱歉,如果已经回答了这个问题,但我认为我实际上缺乏正式的教育来正确地提出这个问题,因此也没有正确的标准来成功地搜索它.我有一个API,有几个调用几乎相同的东西,但使用不同的方法作

很抱歉,如果已经回答了这个问题,但我认为我实际上缺乏正式的教育来正确地提出这个问题,因此也没有正确的标准来成功地搜索它.

我有一个API,有几个调用几乎相同的东西,但使用不同的方法作用于不同的输入对象,但总是形成相同的接口.我想采取削减class AResponse { };class BRequest { };class BResponse { };interface IWorker{ AResponse DoA(ARequest aRequest); BResponse DoB(BRequest bRequest);}class Worker : IWorker{ public AResponse DoA(ARequest aRequest) { return new AResponse(); } public BResponse DoB(BRequest bRequest) { return new BResponse(); }}class Program{ static void Main(string[] args) { // current concrete copy var b1 = API.DoB(new BRequest { }); // new generic implementation var a2 = API.DoA2(new ARequest { }); var b2 = API.DoB2(new BRequest { }); }}static class API{ // current concrete copy return worker.DoA(aRequest); } public static BResponse DoB(BRequest bRequest) { // lots of common code for logging return worker.DoB(bRequest); } private static IWorker GetWorker() { return new Worker(); } // new generic implementation Attempt public static AResponse DoA2(ARequest aRequest) { return DoGen(aRequest, "DoA"); // how to make references to DoA and DoB methods on the IWorker strongly typed? } public static BResponse DoB2(BRequest bRequest) { return DoGen(bRequest, "DoB"); // how to make references to DoA and DoB methods on the IWorker strongly typed? } public static TResponse DoGen(TRequest requestObj, string methodname) where TRequest : class where TResponse : class { // lots of common code for logging var mi = worker.GetType().GetMethod(methodname); var result = mi.Invoke(worker, new Object[] { requestObj }); return result as TResponse; }}

解决方法:

方法名称的“magic”字符串更改为委托上的委托

public static AResponse DoA2(ARequest aRequest) { return DoGen(aRequest, worker => worker.DoA); } public static BResponse DoB2(BRequest bRequest) { return DoGen(bRequest, worker => worker.DoB); } public static TResponse DoGen(TRequest requestObj, Func methodRef) where TRequest : class where TResponse : class { // lots of common code for logging var method = methodRef(worker); return method(requestObj); }【感谢龙石为本站提供数据共享交换平台 http://www.longshidata.com/pages/exchange.html】

上一篇:51CTO博客的使用技巧。
下一篇:没有了
网友评论