In VB Wie erzwinge Sie eine vererbte Klasse ein Attribut auf die Klasse zu benutzen?
-
10-07-2019 - |
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
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.