簡體   English   中英

如何使用返回父類的函數初始化子類?

[英]How to initialize child class using function that returns a parent class?

我已經擴展了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參數並復制該表的信息,但我希望有更直接的方法來做到這一點。

我會為DataTable編寫一個擴展方法,而不是對它進行子類化

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

-

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

我喜歡讀:操作者is a 所以DataTableExtended是一個DataTable 請注意,這並不意味着一個DataTableDataTableExtended ,因此投了故障。

我認為在這個方向“強制轉換”的最好方法是在你的建議中使用構造函數中的基類實例。

另見這個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM