2011-01-26 75 views
1

我使用Castle Active Record'ActiveRecordBase類作爲我的db對象的基類。這使我可以利用AR模式的好處,例如:如何從基類中隱藏方法?

MyClass clas = new MyClass(); 
clas.Number = 5; 
clas.Save(); 

問題是,對於某些對象,我想隱藏這些方法。我怎樣才能做到這一點?我不使用這些對象的接口。

編輯1: 爲了更清楚:我想有10個類從基類繼承,但其中3個不應該公開基類的一些方法。因此,例如對於MyClassB,這個:

MyClassB clasB = new MyClassB(); 
clasB.Number = 5; 
clasB.Save(); 

應該是不可能的 - 此對象不應該能夠保存()。編號2: 我讀過c# hide from dervied classes some properties of base class。我同意這是不好的方法,但請記住,我必須使用ActiveRecordBase,我不能簡單地修改它(至少如果我想堅持原始的Castle Active Record源)。

+2

你的意思是隱藏,究竟是什麼意思? – BoltClock 2011-01-26 10:33:54

+0

那麼你的意思是`MyClassB`不應該有`Number`屬性? – BoltClock 2011-01-26 10:40:12

回答

3

你不這樣做。

您重構設計,以便7個對象從一個提供所需功能的對象繼承,另外3個從不提供此功能的對象繼承,並且它們都從主「核心」對象繼承。把它想象成一棵樹。與其試圖隱藏視圖,不如簡單地改變分支的位置。我不確定這個比喻是否有效,但讓我們假裝它。

3

如果要隱藏它們,可能不屬於該基類。我建議擴展繼承層次來實現這一點。