从类继承并添加附加属性

本文关键字:属性 添加 继承 | 更新日期: 2023-09-27 17:57:54

我在一个应用程序中有一个类,我不能更改它(遗留),它位于程序集(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?

从类继承并添加附加属性

这确实是一个很好的方法。您可以使用一个非常快速的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

如果您为ShippingMethod类创建一个扩展方法,该怎么办?

做到这一点的最佳方式是任何对您最有效的方式如果你是必须维护这个代码的人,那么什么会让你的生活变得最轻松呢?

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