Rainer Heer Ответов: 3

Абстрактные классы, наследование, перезапись и т. д.


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

Упрощенный пример:
В приложении " Form1 "я создаю экземпляр (супер)класса" Printer "с аргументом" PrinterType " (enum). Этот класс " принтер "предоставляет метод" Print ()". Код для печати на различных аппаратных средствах должен быть закодирован в отдельных классах. Таким образом, класс" принтер " должен использовать/наследовать один из конкретных (суб)классов.

Единственный способ, который я нашел, - это объявить метод Print() в классах (sub)как общий. Но это для меня как определение Sub () в публичном модуле.
Я уверен, что есть лучший способ программирования в качестве моего обходного пути.

Что я уже пробовал:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim oPrinter As New Printer(Printer.PrinterType.HP)
        oPrinter.Print()
    End Sub
End Class


Public Class Printer

    Public Enum PrinterType
        HP
        Epson
    End Enum

    Public ActivePrinter As PrinterType

    Public Sub New(ByVal mPrinterType As PrinterType)
        ActivePrinter = mPrinterType
    End Sub

    Public Sub Print()
        Select Case ActivePrinter
            Case PrinterType.HP
                HP_Printer.Print()
            Case PrinterType.Epson
                Epson_Printer.Print()
        End Select
    End Sub

End Class


Public Class HP_Printer
    Public Shared Sub Print()
        Beep()
    End Sub
End Class


Public Class Epson_Printer
    Public Shared Sub Print()
        Beep()
    End Sub
End Class

Richard MacCutchan

Зачем вам нужны разные версии кода печати, когда все это идет в одно и то же место (диспетчер очереди Windows), Прежде чем быть переданным драйверу устройства?

3 Ответов

Рейтинг:
2

Rainer Heer

Уважаемые Эксперты,

Ричард
конечно, это всего лишь простой и понятный пример, проблема в моем приложении не имеет ничего общего с принтерами Windows.

Мика, Оригинальный Гриф
Я думаю, что понимаю оператор Inherits, это означает, что я создаю новый класс, который использует код базового (родительского) класса. Но чтобы создать экземпляр этого нового класса, я должен создать объект с типом нового класса. Мне нужен обратный путь.
Я ищу способ, которым базовый класс может наследовать методы из разных классов в зависимости от аргумента метода NEW ().

Пожалуйста, попробуйте исправить мои строки кода таким образом.


Wendelius

Вместо публикации нового решения всегда используйте команду "есть вопрос или комментарий?" комментировать данные решения. Таким образом, автор решения будет уведомлен.

Сказав это, взгляните на обновленное Решение 1

Рейтинг:
1

Wendelius

Если я правильно понял вопрос, вы ищете Оператор Inherits[^]

Несколько учебных пособий, которые вы могли бы найти полезными
- Наследование от базового класса в Microsoft .NET[^]
- Основы Наследования (Visual Basic)[^]
- VB.Net - классы &амп; объекты[^]

[ДОБАВЛЕН]
Основываясь на вашем комментарии в решении 3, я не уверен, что вы ищете множественное наследование. Если это так, то он не поддерживается в .Net

Я не уверен, что вы действительно имеете в виду дженерики. Это поможет вам иметь общую функциональность, все еще работая с разными классами. Взгляните на Универсальные типы в Visual Basic (Visual Basic)[^]


Рейтинг:
0

OriginalGriff

Производные классы HP_Printer и Epson_Printer от базового класса принтера могут переопределять реализацию базового класса для обеспечения функций печати, специфичных для конкретной модели.

Наследование от базового класса в Microsoft .NET[^] и Основы Наследования (Visual Basic)[^] может помочь.