从类继承并添加其他属性

时间:2013-02-06 17:01:20

标签: c# class inheritance

我在一个应用程序中有一个类 - 我无法更改(遗留) - 这是在程序集(DLL文件)中:

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

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

我有第二个引用该程序集(DLL文件)的应用程序,需要使用所有Shipping Methods填充下拉列表。例如:“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中的值输入新列表?

3 个答案:

答案 0 :(得分:2)

这确实是一种很好的方法。您可以使用非常快速的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,返回{{1}}

答案 1 :(得分:0)

如果为ShippingMethod类创建扩展方法怎么办?

答案 2 :(得分:0)

执行此操作的最佳方法是以最适合您的方式运行如果您是必须维护此代码的人,那么什么会让您的生活变得最轻松?

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