使用工厂方法创建子类对象

时间:2014-02-24 16:08:47

标签: c# .net factory

有一类我无法控制的金牌。它有一个工厂方法:

public static Gold TransmuteFromLead(Lead someLead);

我现在正在继承Gold来制作我自己的GoldWatch类。我有一个Lead对象。有没有办法在GoldWatch中编写TransmuteFromLead方法,以某种方式使用Gold的TransmuteFromLead方法但是生成GoldWatch对象?

对于类似但不完全相同的问题,请参阅What's the correct alternative to static method inheritance?但我的情况有所不同,因为我无法控制基类。

2 个答案:

答案 0 :(得分:2)

您可以使用隐式运算符:

public static implicit operator GoldWatch(Gold g)
{
    return new GoldWatch(g);
}

然后在GoldWatch上添加一个构造函数,从Gold对象启动自己。

这将允许您这样做:

var goldWatch = (GoldWatch)TransmuteFromLead(someLead);

甚至是这样:

GoldWatch goldWatch = TransmuteFromLead(someLead);

答案 1 :(得分:2)

对于Gold中的任何其他公共方法,您可以将它们包装在GoldWatch中,只需在gold实例上调用相同的方法。

class GoldWatch : Gold {
    Gold gold;

    private GoldWatch(Gold gold) {
        this.gold = gold;
    }

    GoldWatch TransmuteFromLead(Lead someLead) {
        return new GoldWatch(Gold.TransmuteFromLead(someLead));
    }
}