In VB, come si forza una classe ereditata a utilizzare un attributo sulla classe?
-
10-07-2019 - |
Domanda
Sto cercando di forzare una classe ereditata a utilizzare un attributo personalizzato. Sto creando una libreria di classi in cui l'utente che desidera creare un elemento lo farà, ma sarà costretto ad aggiungere un attributo (o Visual Studio aggiungerà automaticamente l'attributo predefinito) alla loro classe ereditata. Ecco cosa spero di ottenere:
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
Quindi il pensiero è molto simile a quando si contrassegna una funzione come " MustOverride " e quindi la classe ereditata deve sovrascrivere la funzione, voglio che l'attributo sia " MustOverride " facendo in modo che la classe ereditata specifichi il valore.
Ho provato questo, e funzionerà, ma sarebbe molto più pulito se potessi usare gli attributi:
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
Grazie per l'aiuto che puoi fornire.
Scott
Soluzione
In .NET non è possibile forzare una classe a definire un attributo al momento della compilazione. Il meglio che sarai in grado di fare è verificare in fase di esecuzione se l'attributo è stato definito e, in caso contrario, generare un'eccezione.
Altri suggerimenti
Hai preso in considerazione l'implementazione di un'interfaccia? Presumo che tu stia usando una classe base come vuoi fornire un po 'di codice nella base, altrimenti l'interfaccia potrebbe essere migliore a seconda degli altri requisiti:
Interface IBase
ReadOnly Property CustomAttribute() As String
End Interface
È ancora molto compatto e quando si digita "Implementa IBase" in una nuova classe, Visual Studio inserirà il codice per te.