En VB, ¿cómo obliga a una clase heredada a usar un atributo en la clase?
-
10-07-2019 - |
Pregunta
Estoy tratando de forzar a una clase heredada a usar un atributo personalizado. Estoy creando una biblioteca de clases donde el usuario que quiere crear un elemento lo hará, pero se verá obligado a agregar un atributo (o Visual Studio agregará automáticamente el atributo predeterminado) a su clase heredada. Esto es lo que espero lograr:
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
Entonces, la idea es muy parecida a cuando marca una función como "Debe anular" y luego la clase heredada debe anular la función, quiero que el atributo sea "Debe anular" haciendo que la clase heredada especifique el valor.
He intentado esto y funcionará, pero sería mucho más limpio si pudiera usar atributos:
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
Gracias por cualquier ayuda que pueda brindar.
Scott
Solución
No hay forma en .NET de forzar a una clase a definir un atributo en tiempo de compilación. Lo mejor que podrá hacer es verificar en tiempo de ejecución si se definió el atributo y, si no, lanzar una excepción.
Otros consejos
¿Consideró implementar una interfaz en su lugar? Supongo que está utilizando una clase base ya que desea proporcionar algún código en la base, de lo contrario, una interfaz podría ser mejor dependiendo de sus otros requisitos:
Interface IBase
ReadOnly Property CustomAttribute() As String
End Interface
Todavía es muy compacto y cuando escribe 'Implements IBase' en una nueva clase, Visual Studio completará el código por usted.