我正在學習C#並決定爲矩陣及其功能編寫一個類庫以獲得一些經驗和實踐。設計良好的類和層次結構
好了,現在我有下面的類模型:
class Matrix // For rectangular matrices
{ }
class SquareMatrix : Matrix
{ }
class RowMatrix : Matrix
{ }
class ColumnMatrix : Matrix
{ }
每個類的具有合適的構造採取尺寸或特定矩陣的順序。
現在我的SquareMatrix類有一個特定的功能來查找並返回行列式。我在這裏遇到的問題是,如果我的庫的用戶創建了維度爲n和n的Matrix類型的實例,那麼他將無法使用Determinant()方法,因爲它只駐留在SquareMatrix中,而他的實例的類型爲Matrix 。
其他方法也會出現類似的問題。
所以我的問題是:
- 是我的一流的設計缺陷?
- 有什麼辦法可以解決這個問題嗎? (OR(儘管它有一個難得的機會),我應該還是期待用戶正確實例化對象?)
謝謝大家提前:)
沒有完美的解決方案,這種關係在繼承方面表現不佳。參見[圓橢圓問題](http://en.wikipedia.org/wiki/Circle-ellipse_problem)。 – 2014-10-11 06:59:16
真的很好鏈接,謝謝! – crazyGamer 2014-10-11 13:05:35
那麼當然最簡單的解決方案就是簡單地拋棄所有的繼承,並有異常或布爾返回來檢查有效性。但是,這不是真正的OOP是... – crazyGamer 2014-10-11 13:22:23