2011-09-30 71 views
0

我想我很驚訝地發現Implements<Serializable()>沒有從類繼承到類,這意味着它必須重新定義每個我想重新創建這些行爲。我想知道在.Net中還有什麼是不可以的?謝謝什麼不能在.Net中繼承?

+0

MHH,你知道這事呢?我沒有注意到這個奇怪的行爲 –

+0

不,接口實現絕對得到繼承。屬性可以自動使用AttributeUsage,也可以通過僅搜索屬性的基類來手動完成。也許私人會員是一個更好的例子。他們得到繼承,但你不能使用它們。不妨稱之爲「不能繼承」。 –

+0

好吧,所以我有一個基類A實現接口IA,IA已經聲明瞭方法Do作爲定義的方法。如果B類繼承A,並且B類試圖實現IA.Do,編譯器會抱怨「接口'IA'沒有被這個類實現」。這是否意味着B類也實現了IA,因爲它可以將IA.Do方法與B結合?這是我得到原始問題基礎的地方。 –

回答

5

這些是2個不同的項目:接口和屬性繼承。

Inherits部分引用了接口如何在類層次結構中行爲。接口確實是繼承的。如果一個給定的基類實現IFactory那麼它的所有派生類型都會。關於派生類如何重新實現接口或特定方法,存在某些語言上的古怪之處。然而,在.Net級別,一旦基類實現了一個接口,所有的派生類也將如此。

屬性是否被繼承取決於給定屬性的AttributeUsage上的值AttributeUsage.Inherited。在Serializable的情況下,它被標記爲Inherits=false,並且不會被繼承。每個屬性都必須在這裏選擇自己的行爲。

1

長答案將花費太長時間,但簡短答案是使用sealed(c#)或NotInheritable(VB.NET)修飾符的任何類。

http://msdn.microsoft.com/en-us/library/88c54tsw%28v=vs.71%29.aspx

+0

您是否正在艱難地決定哪個答案是正確的? –

+0

我的appologies。接受按鈕並不總是適用於我,並且實際上向meta.serverfault.com提交了一個錯誤。試圖將問題重現爲其命中和錯過。我刷新了50次頁面,只有三分之一的時間可以在不同的答案之間切換。有時它根本不接受,有時只接受一次,但不再切換。 http://meta.serverfault.com/questions/2135/accept-button-does-not-work-all-the-time –