【问题标题】:How to structure this interface/inheritance如何构造这个接口/继承
【发布时间】:2009-04-07 18:01:48
【问题描述】:
  • 我有一个File 类,它有一个 Open() 方法。
  • 我有一个子类 的File 称为TextFile 实现IReadableFile 接口,这需要 Read() 方法的实现。

如果我将变量myFile 声明为IReadableFile,我不能在其上调用Open() 方法。我希望能够同时使用TextFile 的基类(File)方法及其接口(@98​​7654332@)方法的功能。这可能吗?

编辑:我在 VB.NET 中工作(如果这很重要的话)。

我试图通过 File 类提供最少的文件 I/O 功能集,然后通过从 File 派生并添加一些附加方法(如读取、写入等)为特定类型的文件提供扩展功能。 .我希望派生类是多态的 - 例如,在 TextFile 上调用 Write 方法只会将文本数据写入文件系统,而在 BinaryFile 上调用 Write 方法可能会在将二进制数据写入文件系统之前对二进制数据进行 64 位编码。

【问题讨论】:

  • 你用什么语言工作?
  • 这与语言无关。

标签: oop inheritance interface


【解决方案1】:

创建一个IFile接口,使File类实现IFile。 IReadableFile 将继承自 IFile。

【讨论】:

    【解决方案2】:

    只有将 Open() 放入 IReadableFile 或将 IReadableFile 转换为 TextFile 时才有可能。

    更多关于你正在做的事情的细节可能会有所帮助。

    【讨论】:

      【解决方案3】:

      您可以将 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
      

      【讨论】:

        猜你喜欢
        • 2015-07-05
        • 2010-09-18
        • 2017-03-11
        • 1970-01-01
        • 1970-01-01
        • 2016-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多