基类可以知道实现它的对象的属性

时间:2015-02-03 22:43:29

标签: c# inheritance derived-class base-class

我正在实现一个Base对象类来实现XmlSerializer。

class FN_ObjectBase
{
    public object FromXML(string xml)
    {
        var serializer = new XmlSerializer(typeof("ObjectA??"));

        var reader = new XmlTextReader(new StringReader(xml));

        var scriptItem = serializer.Deserialize(reader);

        return scriptItem;
    }
}

class ObjectA : FN_ObjectBase
{
    public object = new ObjectA.FromXML("serializedXML");
}

如何正确编写FromXML方法以根据派生类创建任何对象?

2 个答案:

答案 0 :(得分:3)

尝试使用通用方法:

public T FromXML<T>(string xml)
{
    var serializer = new XmlSerializer(typeof(T));

    var reader = new XmlTextReader(new StringReader(xml));

    var scriptItem = serializer.Deserialize(reader);

    return (T)scriptItem;
}

称之为:

FromXML<ObjectA>("serialized xml")

OOP规则: 切勿在基类型中使用派生类型。

答案 1 :(得分:0)

您不需要抽象方法,虽然泛型方法实现可行,但它向调用者发出略微不同(尽管可能更好)的意图。

您需要做的就是将this.GetType()传递给基础实现中的XMLSerializer构造函数。