【问题标题】:Inheriting from a class and adding an additional property从类继承并添加附加属性
【发布时间】:2013-02-06 17:01:19
【问题描述】:

我在一个应用程序中有一个类 - 我无法更改(旧版) - 它位于程序集(DLL 文件)内部:

public class ShippingMethod
{
    public string ShipMethodCode { get; set; }
    public string ShipMethodName { get; set; }
    public decimal ShippingCost { get; set; }

    public List<ShippingMethod> GetAllShippingMethods()
    {
    ......
    }
}

我有第二个应用程序正在引用该程序集(DLL 文件),并且需要使用所有运输方法填充下拉列表。例如:“UPS - 3.25 美元”

问题在于它需要为不同的货币使用正确的格式。例如:3.25 美元或 3.25 欧元,具体取决于名为 CountryID 的参数。

我编写了一个函数String DisplayMoney(Decimal Amount, Integer CountryID),它将返回金额的正确格式。

现在我需要将此功能应用于每种运输方式并将其保存到新列表中。 最好的方法是什么?

我可以创建另一个名为 LocalizedShippingMethods 的类,如下所示:

public class LocalizedShippingMethod
{
    public ShippingMethod ShipMethod { get; set; }
    public string LocalizedShippingCost { get; set; }
}

这是实现这一目标的最佳方式吗?有没有更好的方法使用继承来做到这一点?如果我使用继承,如何将第一个 LIST 中的值获取到 NEW LIST 中?

【问题讨论】:

  • 将 LocalizedShippingCost 重命名为 LocalShippingCurrency?

标签: c# class inheritance


【解决方案1】:

这确实是一个很好的方法。您可以使用非常快速的 Linq 查询将旧的 List 拉入新的:

List<LocalizedShippingMethod> Translate(List<ShippingMethod> oldList)
{
  return oldList.Select(a => new LocalizedShippingMethod
     {
         // Initialize properties according to however you translate them
     }).ToList();
}

此外,为了使这更加精简和明显,您可以执行以下任何操作来帮助翻译:

  • LocalizedShippingMethod 创建一个接受ShippingMethod 并正确设置属性的构造函数
  • LocalizedShippingMethod 上创建一个静态方法,该方法接受ShippingMethod 并返回一个初始化的LocalizedShippingMethod
  • LocalizedShippingMethod 上创建一个从ShippingMethod 转换的运算符
  • ShippingMethod 上创建一个扩展方法,调用它ToLocalized() 返回一个LocalizedShippingMethod

【讨论】:

  • 这样会逐个复制list属性的数据吗?
  • 它将逐个对象复制List对象的内容;您必须初始化 LocalizedShippingMethod 初始化块中的属性才能正确创建该对象。
  • 谢谢。我就是这样做的:LocalizedShippingMethodList = (from S in OriginalShippingMethodsselect new LocalizedShippingMethod { ShippingMethod = S, LocalizedShippingCost = DisplayMoney(S.ShippingCost, CountryID) }).ToList(); 这样,每个对象都不会被复制,而是被另一个变量引用。 (ShippingMethod = S, )
  • 哦,这绝对是正确的 - 当我查看它时,我错过了那是同一堂课。
【解决方案2】:

如果为 ShippingMethod 类创建扩展方法会怎样?

【讨论】:

    【解决方案3】:

    做到这一点的最佳方式是最适合你的方式。如果你是必须维护这段代码的人,那么什么会让你的生活变得最轻松?

    一旦你回答了这个问题,那个就是最好的解决方案。

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2020-12-11
      相关资源
      最近更新 更多