【发布时间】:2023-04-05 03:25:01
【问题描述】:
我正在使用 N 个提供商发送 SMS 消息的 Web 服务。每个提供者在其自己的 Web 服务中接收不同格式的消息。
为了在我的 Web 服务中创建模式,我创建了一个抽象类,其中包含要为每个提供者实现的许多方法。
有些方法需要接收一个可以是不同类型的对象,这取决于继承它的子类(提供者)。其中一种方法返回一个对象,该对象至少可以是两种不同的类型。
我使用“object”关键字实现了这一点,它允许我传递或返回任何对象:
public abstract class Provider {
protected HttpClient _Client;
protected SMSManagerAPIContext _Context;
public abstract DeliveryResponse SendSMS(object Sms);
protected abstract DeliveryResponse ParseResponse(HttpResponseMessage Response);
public abstract object PrepareMessage(SMS Sms);
protected abstract void SaveResponse(object Sms, HttpResponseMessage Response);
}
SendSMS方法中接收到的对象Sms是PrepareMessage方法的返回值。问题是PrepareMessage 可以返回不同类型的对象。
(例如,我的一个提供者接受发送一条或多条消息的请求,但每个消息的对象都不同。然后我在PrepareMessage 方法中返回正确的对象,SendSMS 方法发送它作为提供者的 JSON 对象。)
它可以工作,但在开发过程中会在子类中引起一些转换问题,我想知道是否有更好的方法来做到这一点。 我已经阅读了一些关于它的问题:
Generic method that can return different types
我认为使用泛型的重载方法会更好,但我没有使用 C# 的经验。
有什么想法吗?
【问题讨论】:
-
你可以使用
dynamic作为返回类型。 -
嗯,它似乎工作正常!您知道使用泛型使用动态 x 在性能上是否存在一些差异吗?我希望它会被许多用户同时调用。
-
谢谢。 Gishu 的回答说:“性能:泛型将使用值类型的算法/代码的性能提高了一个显着的数量级。它阻止了整个装箱-拆箱周期,这让我们在使用前泛型时付出了代价。动态也没有为此做任何事情。 "
标签: c# inheritance return-type