Страницы

Поиск по вопросам

понедельник, 29 октября 2018 г.

Множественное наследование через интерфейсы, работа с общими полями и свойствами

Планирую разделить один большой класс на 5 частей следующей стратегией.
Imports ConsoleApplication1
Module Module1
Interface IA Function AFunc() As Integer End Interface
Class A Implements IA
Public Function AFunc() As Integer Implements IA.AFunc
Return 1 End Function
End Class
Interface IB Function BFunc() As Integer End Interface
Class B Implements IB
Public Function BFunc() As Integer Implements IB.BFunc
Return 2 End Function
End Class
Class AB Implements IA, IB
Protected _a As New A Protected _b As New B
Protected _somePropertyOne As String = "value1"
Private _somePropertyTwo As String = "value2" Public Property SomePropertyTwo() As String Get Return _somePropertyTwo End Get Set(ByVal value As String) _somePropertyTwo = value End Set End Property
Public Function AFunc() As Integer Implements IA.AFunc Return _a.AFunc() End Function
Public Function BFunc() As Integer Implements IB.BFunc Return _b.BFunc() End Function
End Class
Sub Main()
Dim ab As New AB
Console.WriteLine(ab.AFunc) Console.WriteLine(ab.BFunc) Console.ReadLine()
End Sub
End Module
Возможно это и неправильно, но задача, требует на данном этапе реализовать разделение таким образом, чтобы все методы из набора подклассов, имели доступ к набору общих свойств (в данном случае _somePropertyOne и SomePropertyTwo)
Как это правильнее реализовать?
Куда перенести _somePropertyOne и SomePropertyTwo?
В моем случае идеально подошли Partial Class


Ответ

Используй методы-расширения.
Imports System Imports System.Runtime.CompilerServices
Public Interface ICommon Property Value As Integer End Interface
Public Module IAExts Public Function FuncA(ByVal Obj As ICommon) As Integer Return 1 + Obj.Value End Function End Module
Public Module IBExts Public Function FuncB(ByVal Obj As ICommon) As Integer Return 2 + Obj.Value End Function End Module
Public Class Smth Implements ICommon Public Property Value As Integer Implements ICommon.Value End Class
Public Module Module1 Public Sub Main() Dim X As New Smth() With {.Value = 77} Console.WriteLine(x.FuncA()) Console.WriteLine(x.FuncB()) End Sub End Module

Комментариев нет:

Отправить комментарий