Frage

Ich versuche, eine vererbte Klasse zu zwingen, ein benutzerdefiniertes Attribut zu verwenden. Ich bin eine Klassenbibliothek schaffen, in dem der Benutzer, ein Element erstellen will so tun, aber gezwungen sein, ein Attribut hinzufügen, um ihre geerbten Klasse (oder Visual Studio wird automatisch das Standardattribut hinzufügen). Hier ist das, was ich hoffe, zu erreichen:

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

So ist der Gedanke, dass viel, wie wenn man eine Funktion als „Mustoverride“ markiert und dann muss die geerbte Klasse die Funktion außer Kraft setzen, mag ich das Attribut als „Mustoverride“ verursacht die geerbte Klasse den Wert angeben.

Ich habe das versucht, und es wird funktionieren, aber es wäre viel sauberer, wenn ich Attribute verwenden:

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

Vielen Dank für jede Hilfe, die Sie anbieten können.

Scott

War es hilfreich?

Lösung

Es gibt keine Möglichkeit in .NET eine Klasse zu zwingen, ein Attribut bei der Kompilierung zu definieren. Am besten Sie werden in der Lage sein, ist Prüfung zur Laufzeit zu tun, ob das Attribut definiert wurde, und wenn nicht eine Ausnahme zu werfen.

Andere Tipps

Haben betrachten Sie eine Schnittstelle anstelle der Umsetzung? Ich gehe davon aus, dass Sie eine Basisklasse verwenden, wie Sie einen Code in der Basis zur Verfügung stellen möchten, wenn nicht, dann könnte eine Schnittstelle besser je nach anderen Anforderungen:

Interface IBase
    ReadOnly Property CustomAttribute() As String   
End Interface

Es ist immer noch sehr kompakt und wenn Sie ‚Implementiert Ibase‘ in einer neuen Klasse geben Visual Studio für Sie im Code füllen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top