2009-10-29 73 views
3

我試圖強制繼承類使用自定義屬性。我創建了一個類庫,其中要創建項目的用戶將這樣做,但不得不添加一個屬性(或Visual Studio將自動添加默認屬性)到他們的繼承類。以下是我希望能實現:在VB中,你如何強制繼承類在類上使用屬性?

BaseClass.vb:

<CustomAttribute(10)> _ 
Public Class BaseClass 

End Class 

MyClass.vb:

<CustomAttribute(12)> _ 
Public Class MyClass 
    Inherits BaseClass 

    Public Sub New() 
     Mybase.New() 
    End Sub 

End Class 

所以想到的是,就像當你標記功能「 MustOverride「,然後繼承類必須覆蓋函數,我希望該屬性爲」MustOverride「,導致繼承類指定值。

我已經試過這一點,它會工作,但它是乾淨多了,如果我可以使用屬性:

BaseClass.vb:

Public MustInherit Class BaseClass 

    Public MustOverride ReadOnly Property CustomAttribute() As String 

End Class 

MyClass.vb:

Public Class MyClass 
    Inherits BaseClass 

    Public Sub New() 
     Mybase.New() 
    End Sub 

    Public Overrides ReadOnly Property CustomAttribute() As String 
     Get 
      Return "testing" 
     End Get 
    End Property 
End Class 

感謝您提供任何幫助。

Scott

+0

如何使用這些類使屬性比屬性更清潔? – CoderDennis 2009-10-29 16:51:20

+0

@Dennis - 注意代碼在頂級類集上的時間縮短了多少?這就是我所追求的。請注意,這只是一個屬性,我需要在每個繼承類上放置20個以上的屬性。 (當然,實際上只有4行代碼可以爲每個屬性保存(屬性),但是4 * 20 = 80行額外的代碼是我希望不會有的(謝天謝地,visual studio爲我生成了這個代碼,但仍然讓我感到混亂代碼。) – Scott 2009-10-29 17:27:55

+0

好的,但是你寫了20個自定義屬性類嗎?那些使用這些類的代碼呢?代碼是如何清潔以查看應用於類的屬性?這看起來不是正確的 – CoderDennis 2009-10-29 20:50:55

回答

2

.NET沒有辦法強制類在編譯時定義一個屬性。您能夠做的最好的事情是在運行時檢查該屬性是否已定義,以及是否拋出異常。

+0

那不是我想要的答案,而是我懷疑的答案。謝謝 - Scott – Scott 2009-10-29 16:55:53

+0

@Scott對不起,我希望我有你想要的答案! – Joseph 2009-10-29 17:11:13

3

您是否考慮實施接口?我假設你正在使用一個基類,你要提供基本的一些代碼,如果沒有,那麼接口可能會更好取決於您的其它要求:

Interface IBase 
    ReadOnly Property CustomAttribute() As String 
End Interface 

它仍然是非常緊湊的,當你鍵入'在新類中實現IBase'Visual Studio將爲您填寫代碼。