В VB, Как вы заставляете унаследованный класс использовать атрибут класса? - PullRequest
3 голосов
/ 29 октября 2009

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

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

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

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

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

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

Scott

Ответы [ 2 ]

3 голосов
/ 19 июня 2012

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

Interface IBase
    ReadOnly Property CustomAttribute() As String   
End Interface

Это все еще очень компактно, и когда вы наберете «Implements IBase» в новом классе, Visual Studio заполнит код для вас.

2 голосов
/ 29 октября 2009

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

...