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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top