用我的界面重做

时间:2015-12-17 13:31:05

标签: c# generics interface

我的界面有5种方法。

 public interface IPhoneAccountTransfer
{
    BalanceInfo[] GetInmateAccountBalance();
    AuthorizationCallConfirmation GetAuthorizeCallResult();
    ChargeAuthorizationConfirmation CommitChargeAuthorization(string authCode);
    ChargeAuthorizationConfirmation CancelBalanceTransfer(string authorizationToken);
    VerifyAuthorizationConfirmation VerifyAuthorization();
}

问题是我有不同的电话帐户转帐供应商。现在在我的方法中,返回类型与一个第三方相关联。

例如。

public partial class BalanceInfo
{
    private BalanceType typeField;
    private decimal amountField;

    public BalanceType Type
    {
        get
        {
            return this.typeField;
        }
        set
        {
            this.typeField = value;
         }
      }

public enum BalanceType
{
     Available,
     Phone,
     Commissary,
     Account,
     Debt,
     Held,
 }

说我想保留五种实施方法。我可以使方法通用吗?

2 个答案:

答案 0 :(得分:0)

创建自己的自定义返回类型:

public interface IPhoneAccountTransfer
{
    YourCustomBalanceInfo[] GetInmateAccountBalance();
    YourCustomAuthorizationCallConfirmation GetAuthorizeCallResult();
    YourCustomChargeAuthorizationConfirmation CommitChargeAuthorization(string authCode);
    YourCustomChargeAuthorizationConfirmation CancelBalanceTransfer(string authorizationToken);
    YourCustomVerifyAuthorizationConfirmation VerifyAuthorization();
}

将第三方回复转换为您自己的已知类型。

这是一个实施示例:

public YourCustomVerifyAuthorizationConfirmation VerifyAuthorization()
{
    VerifyAuthorizationConfirmation res = DoLogic();
    YourCustomVerifyAuthorizationConfirmation yourWrappedRes = MapResponse(res);
    return yourWrappedRes;
}

答案 1 :(得分:0)

我可以使方法通用吗?

当然 - 但是你想要每个返回类型是通用的吗?如果是这样,那么你必须有五个泛型参数。这会给你编译时的安全性,但会增加使用的复杂性。

有许多细节需要推断,但听起来你有几个选择:

  1. 使用您现在拥有的当前返回类型作为基类,并返回特定于供应商的类。
    • 不同供应商的类型有多相似?他们有许多共同的属性,只是有一些差异吗?
    • 一个缺点是您必须在客户端中转换返回类型以使用其非标准属性
  2. 使用涵盖所有已知供应商的“通用”返回类型,并仅填充与该特定供应商相关的字段
    • 这里的主要好处是,当您使用特定于供应商的字段
    • 时,您不必进行强制转换
  3. 为每个供应商使用不同的方法
    • 这可能意味着你不能使用一个界面(至少不是那些方法)但是使用不同的返回类型,一个界面可能不是正确的解决方案