我創建這些類:如何調用派生類虛擬方法?
public abstract class Node
{
public virtual NodeModel CreateModel()
{
throw new NotImplementedException();
}
}
public class Folder : Node
{
public virtual FolderModel CreateModel()
{
// Implementation
}
}
public class Item : Node
{
public virtual ItemModel CreateModel()
{
// Implementation
}
}
然後在我的節目,我有節點的名單隻包含項目和文件夾對象。當我在列表中循環並嘗試調用CreateModel()方法時,這總是調用的Node類方法(因此拋出異常)。
我不能將CreateModel()更改爲抽象,因爲返回類型根據派生類型而不同。我想知道是否有可能有不同的返回類型。我也想避免泛型。事實是,Intellisense在玩弄它的一個實例時向我展示了上層的方法。如果我從上層類中刪除虛擬實現,那麼它將顯示基類實現。這是我認爲它實際上可能的地方。
那麼我該如何強制程序調用上層類的方法呢?
編輯:答案竟是簡單而正確的在我的鼻子了。返回類型無關緊要,因爲它將從基類AbstractModel()中定義的返回類型繼承。我只是在我的基類中將該方法標記爲抽象,並且它工作得很好。我不知道爲什麼我會在某些時候感到困惑,因爲現在看來我很明顯。
謝謝大家幫助我。
用「上」,你的意思是基類(即節點)或子類/派生類(項或文件夾)。請更新您的問題,因爲它有點不清楚... –
感謝您指出這個錯誤。 – Ucodia
C#不能根據返回類型進行方法解析,所以(除非你像Jon Skeet所建議的那樣使用泛型)我想你會被迫返回一個對象:'public virtual object CreateModel()' –