Как структурировать этот интерфейс / наследование - PullRequest
1 голос
/ 07 апреля 2009
  • У меня есть File класс, который имеет Open() метод.
  • У меня есть подкласс File называется TextFile, что реализует IReadableFile интерфейс, который требует реализация метода Read().

Если я объявлю переменную myFile как IReadableFile, я не смогу вызвать для нее метод Open(). Я хочу иметь возможность одновременно использовать функциональность методов базового класса (File) TextFile и методов его интерфейса (IReadableFile). Это возможно?

РЕДАКТИРОВАТЬ: Я работаю в VB.NET (если это имеет значение).

Я пытаюсь предоставить минимальный набор функциональных возможностей файлового ввода-вывода через класс File, а затем предоставить расширенные возможности для определенных типов файлов, производных от File и добавляя некоторые дополнительные методы (такие как Read, Write и т. Д.) , Я хочу, чтобы производные классы были полиморфными - например, вызов метода Write в TextFile просто записывает текстовые данные в файловую систему, тогда как вызов метода Write в BinaryFile может основать кодирование двоичных данных на 64, прежде чем записывать их в файловую систему.

Ответы [ 3 ]

4 голосов
/ 07 апреля 2009

Создайте интерфейс IFile, сделайте класс File реализующим IFile. IReadableFile наследуется от IFile.

0 голосов
/ 07 апреля 2009

Вы можете объявить myFile как объект TextFile. После этого вы сможете вызывать Read (из унаследованного объекта File) и Open (из реализованного интерфейса IFileReadable).

Public Class File

  Public Sub Open()

  End Sub

End Class

Public Interface IFileReadable
  Sub Read()
End Interface

Public Class TextFile
  Inherits File
  Implements IFileReadable

  Public Sub Read() Implements IFileReadable.Read

  End Sub

End Class

Public Class Main

  Public Sub New()

    Dim oFile As TextFile
    oFile.Read()
    oFile.Open()

  End Sub

End Class
0 голосов
/ 07 апреля 2009

Это возможно, только если вы положили Open () в IReadableFile или привели ваш IReadableFile к TextFile.

Подробнее о том, что вы делаете, может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...