2013-10-06 47 views
1

當我從一個基類繼承時,Visual Studio(v2008在這裏)告訴我需要在派生類中創建的所有MustInherit成員,這非常方便。在.NET中,基類可以確保派生類定義共享成員嗎?

不過,我也希望我的派生類中定義一些共享成員 - 其數值將是不同每個派生類。不幸的是,.NET不允許基礎類中的共享成員使用MustInherit。

是否有任何其他方式讓Visual Studio提醒我,我的派生類還應該包含某些特定的共享成員?

回答

1

不,沒有辦法做到這一點 - 這聽起來像是一種設計氣味,說實話。

擁有MustInherit成員的一半是你可以從基類中的代碼訪問它們。這對於Shared成員來說不合適,因爲沒有指示哪個類訪問共享成員。

您還沒有給我們任何背景來解釋爲什麼你想這樣做,但我建議你嘗試尋找不同的設計。有時並行繼承層次結構(例如,一個用於「工廠」,另一個用於實例)可能很有用,那麼您可能以其他方式創建Shared的成員將成爲工廠類型中的實例成員。它確實取決於你想要達到的目標。

+0

我不太明白..通過基類名訪問共享成員(例如。* MyClassBase.ClassID *)明顯不同於* MyClass.ClassID *。一個基類包含'Public MustOverride Shared Function ClassID()'也是非法的 - 但這會非常方便。爲什麼不允許? –

0

聽起來好像你正試圖在課堂上使用polymorphy,這將無法正常工作。

 int result = ParentClass.STATIC_VALUE; 
     int result2 = ChildClass.STATIC_VALUE; 
     int result3 = AnotherChildClass.STATIC_VALUE; 

假設STATIC_VALUE設置爲不同的值。你如何讓.Net選擇「正確」的價值,因爲沒有任何實例與這三類中的任何一個相關聯?

ParentClass將始終擁有它的定義值,永遠不會有基類的值。 ChildClass將具有ParentClass的值,或者 - 如果已定義 - 它是自己的值,它會影響ParentClass的值。

爲了檢索繼承類的值,你必須明確地調用這個類。沒有辦法使用多態行爲。

在.NET中,基類可以以某種方式確保派生類定義共享成員嗎?

它會被自動定義,但是你不能確保另一個處理你的基類的程序員以後需要定義它自己的值。您應該重新考慮是否可以通過使用班級成員或屬性來解決問題。

相關問題