簡體   English   中英

將派生類轉換回基類

[英]Casting a derived class back to base class

我有一些使用LINQ-to-SQL類的簡單(C#,。NET 4.0)代碼,我正在嘗試“擴展”該對象以添加我自己的字段。 假設LINQ生成的類稱為DatabaseRow ,我想添加兩個bool值供內部使用:

public class ExtendedDatabaseRow: DatabaseRow
{
   public bool ReadyToWrite;
   public bool Changed;
}

這在代碼中工作正常:我可以創建類型為ExtendedDatabaseRow等的對象。但是,我想將這些對象寫回數據庫。 假設我想將對象changedRow (類型為ExtendedDatabaseRow )寫回數據庫:

DataClassesDataContext dc = new DataClassesDataContext();
DatabaseRow newrow = (DatabaseRow) changedRow; // "Cast" the extended object back to the base type
dc.DatabaseRows.InsertOnSubmit(newrow);
dc.SubmitChanges();

這會引發錯誤

你調用的對象是空的。

在嘗試InsertOnSubmit

我可以創建一個新的DatabaseRow對象並從源對象中復制每個參數,但這對我來說似乎有點混亂。 我可以簡單地將擴展對象強制轉換回基礎對象,如果是這樣,我做錯了什么? 或者我正在做的很好,錯誤是更具LINQ特定的東西?

我對C#還是很陌生,尤其是所使用的術語,因此如果這是一個愚蠢的問題,請提前道歉。

您不需要派生新的類來擴展Linq To Sql實體,出於這個確切的原因,這些類被標記為partial類,例如

public partial class DatabaseRow
{
    public bool ReadyToWrite { get; set; }
    public bool Changed { get; set; }
}

這是擴展設計人員生成的數據庫實體的推薦方法,這意味着您不必強制轉換。

IIRC,LINQ-to-SQL創建部分類,因此您可以通過這種方式擴展它; 這可能是擴展LINQ-to-SQL類的默認方式。

那就是說,我不明白為什么你會在那里得到Null參考。 您是否已逐步檢查代碼以檢查插入時newrow是否為null?

暫無
暫無

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

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