有一类我无法控制的金牌。它有一个工厂方法:
public static Gold TransmuteFromLead(Lead someLead);
我现在正在继承Gold来制作我自己的GoldWatch类。我有一个Lead对象。有没有办法在GoldWatch中编写TransmuteFromLead方法,以某种方式使用Gold的TransmuteFromLead方法但是生成GoldWatch对象?
对于类似但不完全相同的问题,请参阅What's the correct alternative to static method inheritance?但我的情况有所不同,因为我无法控制基类。
答案 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));
}
}