私はこのクラスを持っている:ベースタイプのみに基づいて派生オブジェクトを作成する方法は?例えば
public abstract class Device
{
public Device()
{
}
public Device(XmlDevice xmlDevice)
{
// creating device by xmlDevice
}
}
public class Modem : Device
{
public Modem()
{
}
public Modem(XmlModem modem)
{
// creating modem by xmlModem
}
}
public class Plc : Device
{
public Plc()
{
}
public Plc(XmlPlc plc)
{
// creating plc by xmlPlc
}
}
public abstract class XmlDevice
{
public XmlDevice()
{
}
}
public class XmlModem : XmlDevice
{
public XmlModem()
{
}
}
public class XmlPlc : XmlDevice
{
public XmlPlc()
{
}
}
私はXmlDeviceオブジェクトのリストを持っている - どのように私はそのタイプに基づいてデバイスオブジェクトを作成することができますか?私はこのようにすることができます:
foreach(xmlDevice in xmlDevicesList)
{
if(xmlDevice is XmlModem)
devicesList.Add(new Modem((XmlModem)xmlDevice));
else if(xmlDevice is XmlPlc)
devicesList.Add(new Plc((XmlPlc)xmlDevice));
}
しかし、私は "is"ステートメントとキャストオブジェクトを避けたいと思います。これはもっとクリーンな方法ですか?
ファクトリデザインパターン –
を参照してください。しかし、工場では "is"とキャストも使用する必要があります...? – Bero
私は数年前に尋ねた同様の質問に対する回答を見てください:http://stackoverflow.com/questions/15998071/getting-past-open-closed-principle –