Как в VB заставить унаследованный класс использовать атрибут класса?

StackOverflow https://stackoverflow.com/questions/1645045

Вопрос

Я пытаюсь заставить унаследованный класс использовать собственный атрибут.Я создаю библиотеку классов, в которой пользователь, желающий создать элемент, сделает это, но будет вынужден добавить атрибут (или Visual Studio автоматически добавит атрибут по умолчанию) в свой унаследованный класс.Вот чего я надеюсь достичь:

БазовыйКласс.vb:

<CustomAttribute(10)> _
Public Class BaseClass

End Class

МойКласс.vb:

<CustomAttribute(12)> _
Public Class MyClass
    Inherits BaseClass

    Public Sub New()
         Mybase.New()
    End Sub

End Class

Итак, идея такова: когда вы помечаете функцию как «MustOverride», а затем унаследованный класс должен переопределить функцию, я хочу, чтобы атрибут был «MustOverride», заставляя унаследованный класс указывать значение.

Я попробовал это, и это сработает, но было бы намного чище, если бы я мог использовать атрибуты:

БазовыйКласс.vb:

Public MustInherit Class BaseClass

   Public MustOverride ReadOnly Property CustomAttribute() As String

End Class

МойКласс.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

Спасибо за любую помощь, которую вы можете оказать.

Скотт

Это было полезно?

Решение

В .NET нет способа заставить класс определить атрибут во время компиляции.Лучшее, что вы сможете сделать, это проверить во время выполнения, был ли определен атрибут, и, если нет, создать исключение.

Другие советы

Рассматривали ли вы вместо этого реализацию интерфейса?Я предполагаю, что вы используете базовый класс, поскольку хотите предоставить некоторый код в базе, если нет, то интерфейс может быть лучше в зависимости от других ваших требований:

Interface IBase
    ReadOnly Property CustomAttribute() As String   
End Interface

Он по-прежнему очень компактен, и когда вы вводите «Реализует IBase» в новом классе, Visual Studio заполнит код за вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top