[英]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
。 請注意,這並不意味着一個DataTable
是DataTableExtended
,因此投了故障。
我認為在這個方向“強制轉換”的最好方法是在你的建議中使用構造函數中的基類實例。
另見這個答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.