Как в VB заставить унаследованный класс использовать атрибут класса?
-
10-07-2019 - |
Вопрос
Я пытаюсь заставить унаследованный класс использовать собственный атрибут.Я создаю библиотеку классов, в которой пользователь, желающий создать элемент, сделает это, но будет вынужден добавить атрибут (или 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 заполнит код за вас.