К сожалению, вы не можете заставить класс реализовать общий член.
Тем не менее, вы МОЖЕТЕ совместно использовать методы расширения из модуля.
У меня недавно была похожая проблема с необходимостью делиться функциями с несколькими классами, но я все еще мог запускать их как этот класс. Что я решил, используя методы расширения.
В основном, как это работает, модуль расширяет все объекты, которые реализуют интерфейс, который может быть удобно включен в модуль, этот интерфейс будет включать в себя все, к чему модулю потребуется доступ из вызывающего класса, и модуль будет включать в себя все, что ему нужно быть разделенным между всеми классами
Public Module SharedProp
Dim PropA As String
<Extension()>
Public Function GetPropA(Of T As IInterfaceA)(this As T) As String
Return PropA
End Function
<Extension()>
Public Sub SetPropA(Of T As IInterfaceA)(this As T, value As String)
PropA = value
End Function
Public Interface IInterfaceA
Property PropA As String
End Interface
End Module
Пока модуль включен, любой класс, который влияет на ваш интерфейс, будет иметь доступ к методам расширения модуля, которые, в свою очередь, имеют доступ к неявно разделяемым элементам модуля
Imports SharedProp
Public Partial Class ClassA
Implements IInterfaceA
Public Property PropA As String Implements IInterfaceA.PropA
Get
Return Me.GetPropA()
End Get
Set(value As String)
Me.SetPropA(value)
End Set
End Property
End Class
Public Partial Class ClassB
Implements IInterfaceA
Public Property PropA As String Implements IInterfaceA.PropA
Get
Return Me.GetPropA()
End Get
Set(value As String)
Me.SetPropA(value)
End Set
End Property
End Class
Надеюсь, это поможет решить вашу проблему!
РЕДАКТИРОВАТЬ: общий для класса вместо интерфейса
Public Module SharedProp
Dim PropA As Dictionary(Of Type, String)
<Extension()>
Public Function GetPropA(Of T As IInterfaceA)(this As T) As String
If PropA.ContainsKey(GetType(T)) Then
Return PropA(T)
Else
Return Nothing
End Function
<Extension()>
Public Sub SetPropA(Of T As IInterfaceA)(this As T, value As String) As String
If PropA.ContainsKey(GetType(T) Then
PropA(T) = value
Else
PropA.Add(GetType(T), value)
End If
End Function
Public Interface IInterfaceA
Property PropA As String
End Interface
End Module