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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top