如何使用返回父类的函数初始化子类?

时间:2012-09-24 21:25:56

标签: c# xml inheritance

我已将DataTable课扩展如下:

class DataTableExtended:DataTable
    {
        public void specialMethod()
        {}
    }

我想将XML节点解析为此子类,我尝试使用以下内容:

public DataTableExtended parseNodeToDataTable()
        {
            DataSet ds = new DataSet();
            XmlNodeReader reader = new XmlNodeReader(this.resultNodes);
            ds.ReadXml(reader);
            DataTable dt = ds.Tables[1];
            DataTableExtended dte=(DataTableExtended) dt;
            return dt;
        }

它正在抛出一个InvalidCastException。从我到目前为止所读到的,这是因为不可能将父类强制转换为子类。那是准确的吗?如果是这样,我知道我可以重写DataTableExtended构造函数,以便它接受DataTable参数并复制该表的信息,但我希望有更直接的方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

我会为DataTable编写一个扩展方法,而不是将其子类化

public static class DataTableExtensions
{
    public static void SpecialMethod(this DataTable dt)
    {
        //do something
    }
}

-

DataTable dt = .........
dt.SpecialMethod();

答案 1 :(得分:0)

我想将:运算符视为is a。因此DataTableExtendedDataTable。请注意,暗示DataTableDataTableExtended,因此无法投出。

我认为在这个方向“强制转换”的最好方法是在你的建议中使用构造函数中的基类实例。

另见this answer