У меня есть 2 класса A
и B
, которые совместно используют 2 функции S1
и S2
, состоящие из абсолютно идентичного кода в обоих классах:
Public Class A
Private Coll as New Collection
Public Sub A1()
End Sub
Public Function A2() As String
End Function
'Identical functions:
Public Function S1() As Int32
...
Coll.Add(Something1)
End Function
Public Function S2() As Boolean
...
Coll.Add(Something2)
End Function
End Class
Public Class B
Private Coll as New Collection
Public Sub B1(Arg1 As Boolean)
End Sub
Public Function B2() As Int32
End Function
'Identical functions:
Public Function S1() As Int32
...
Coll.Add(Something1)
End Function
Public Function S2() As Boolean
...
Coll.Add(Something2)
End Function
End Class
S1
и S2
являются фабричными функциями, взаимодействующими с полями экземпляра и создающими некоторые объекты, которые входят в локальные коллекции в A
и B
, соответственно, поэтому решения с Shared
, скорее всего, не вариант (?), и, похоже, не упаковывают общие функции вбазовый класс выполнимый (?).
По причинам, связанным с обслуживанием, я хотел бы, чтобы весь кодовый блок, содержащий S1
и S2
, определялся только в одном месте, в идеале в выделенном файле "CommonMethods.vb"
.
По соображениям удобства использования мне нужен доступ ко всем членам напрямую, без использования промежуточного класса C
.Наличие C
было бы абсолютно антиинтуитивно, как бы оно ни называлось.Intellisense должен отображать следующие элементы при наборе A.
A1, A2, S1, S2
, а не
A1, A2, C
и при наборе B.
B1, B2, S1, S2
, а не
B1, B2, C
Если бы в VB.NET существовало #Include Filename
, я бы сделал:
Public Class A
Public Sub A1()
End Sub
Public Function A2() As String
End Function
#Include CommonFunctions.vb
End Class
Public Class B
Public Sub B1(Arg1 As Boolean)
End Sub
Public Function B2() As Int32
End Function
#Include CommonFunctions.vb
End Class
но нет #Include
.
Отсюда вопрос: как можноЯ использую идентичный код?