2014-09-28 121 views
1

我需要找到一種方法來從名爲Cell的抽象基類中實例化一個對象,該類名爲Spreadsheet。我所看到的每個人都說它不能完成,但我需要爲作業的一部分完成它,並且明確地說我們不能讓父類不是抽象的。在繼承類中實例化抽象類對象

下面是從作業的確切報價:

同樣,你需要拿出與這裏的設計,實際上允許 電子表格創建細胞和之前有提示有關如何 做到這一點。您不能使公開聲明的單元類 非抽象。

我能想到的唯一「提示」是父類是公共抽象的,繼承類只是一個公共類,它們都在同一個DLL中。

任何人有任何想法?

編輯:(更多信息) 電子表格類應該包含一個2d的單元格數組。所以爲了填充這個二維數組,我們需要製作單元格對象,然後放入二維電子表格數組中的相應索引中。唯一的問題是我們不能製作任何單元格,因爲單元格類是抽象的。那麼,我如何製作一個單元格並將其放入數組中?

+0

我沒有看到關於你問的問題的作業中的任何東西。你能不同地描述它還是添加更多細節?因爲寫作沒有意義。 – 2014-09-28 02:56:25

回答

2

這意味着你需要使用Cell作爲基類,並且繼承類需要至少有一些實現。

看起來這個特殊的家庭作業有點像足球術語中的「hospital pass」 - 如你所說,Spreadsheet不應該從Cell繼承。

在任何情況下,一旦你寫你的派生類,你可以這樣做:

Cell myCell = new MyDerivedCell(); 

,瞧,你有一個抽象類的實例(抽象類不能直接實例化)。

這樣做的好處是,您可以將大部分通用單元格功能放入Cell中,然後指定一些方法或屬性,這些方法或屬性應該被Cell的更專門的派生推翻。

+0

對不起,但我遇到了一些麻煩。所以我在Cell類抽象中創建了一個屬性,並且我聲明瞭另一個名爲lclass的類來覆蓋抽象屬性,但是當我想使用單元類構造函數來創建單元時,它不起作用。基本上我想要的就像'ICell cell = new ICell(i,j)',但問題是構造函數應該設置的值在抽象基類中是私有的。有沒有什麼辦法可以通過派生類調用抽象基類構造函數來創建對象? – killermist 2014-09-28 05:21:42

+1

是的,您可以通過在派生類中使用[* base *](http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx)關鍵字作爲ctor定義的一部分來鏈接構造函數。 (按照該鏈接,它解釋了一切)。 – slugster 2014-09-28 05:54:22