3

継承されたクラスにカスタム属性を使用させようとしています。アイテムを作成したいユーザーが作成するクラスライブラリを作成していますが、継承されたクラスに属性を追加する必要があります(またはVisual Studioによってデフォルトの属性が自動的に追加されます)。これが私が達成したいと思っていることです:

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

あなたが提供できるどんな助けにも感謝します。

スコット

4

2 に答える 2

3

代わりにインターフェースを実装することを検討しましたか? ベースでいくつかのコードを提供したいので、ベースクラスを使用していると思いますが、そうでない場合は、他の要件に応じてインターフェイスの方が適している可能性があります。

Interface IBase
    ReadOnly Property CustomAttribute() As String   
End Interface

これはまだ非常にコンパクトで、新しいクラスに「Implements IBase」と入力すると、Visual Studio がコードを入力します。

于 2012-06-19T15:29:22.680 に答える
2

.NETには、コンパイル時にクラスに属性を定義させる方法はありません。実行できる最善の方法は、実行時に属性が定義されているかどうかを確認し、定義されていない場合は例外をスローすることです。

于 2009-10-29T16:48:42.373 に答える