【问题标题】:Let an interface inherit from canvas WPF VB.net让一个接口从画布 WPF VB.net 继承
【发布时间】:2013-01-01 23:06:56
【问题描述】:

我的接口是用一些方法和属性定义的

Public Interface ITouchInterface
   'Inherits System.Windows.Controls.Canvas ' This is the problem

   'Methods and Properties

End Interface

我了解我遇到的问题,该接口只能从另一个接口继承,因为System.Windows.Controls.Canvas 不是我不能从它继承的接口。

我的实现接口的类依赖于画布的属性来运行。

目前我的接口实现如下:

Public Class TouchClass
    Inherits Canvas
    Implements ITouchInterface

    'Implementation
End Class

基本上,为了与我的应用程序的其余部分一起工作,我需要接口来指定从画布继承。应用程序的其余部分需要ITouchInterface 类型的对象,但在我当前的实现中,应用程序在实例化类之前不知道画布属性。

例如,我声明了一个ITouchInterface 的列表。然后用实现接口的类填充它。现在我需要遍历这个列表并获取每个项目的宽度,但宽度是画布的一个属性,目前无法访问。

是否存在我不知道的画布界面或是否有任何替代解决方案?

【问题讨论】:

  • 您是否需要每个ITouchInterface 成为Canvas,或者您真的需要能够从每个Width 获得一个Width? (回答前仔细考虑)
  • 我需要每个界面都是画布,宽度只是我需要使用的众多属性之一。我还需要画布的方法才能在窗口中显示它。
  • 您可以向接口添加一个属性,该属性返回一个Canvas 对象。当然,实现者可能会撒谎并返回除自身之外的其他内容,但如果您确实需要完全访问 Canvas,那么这可能是让事情正常进行的最简单方法。
  • 为什么不使用基类而不是接口呢?在我看来,这就是你想要的。
  • @Damien_The_Unbeliever 谢谢,我只需要对我的实现做一些小的调整就可以了。

标签: wpf vb.net class interface


【解决方案1】:

你可以添加一个抽象类,在它之间扮演你的接口角色。当然这会导致更多的耦合...

这正是您想要的结果:您可以对一个实现 ITouchInterface 并从画布继承的类有几种不同的实现

Public Interface ITouchInterface

End Interface

Public MustInherit Class TouchCanvasBase
    Inherits Canvas
    Implements ITouchInterface

End Class

Public Class TouchCanvas
    Inherits TouchCanvasBase

    'specific implementation

End Class

【讨论】:

  • 这种情况下严格来说还是需要接口还是可以只用抽象类来描述一个通用的触摸类?我已经在这个问题上陷入了困境,has-a 关系在我的解决方案中不起作用。
  • 接口不是绝对需要的。您可以在抽象基类中定义必须抽象实现的方法
【解决方案2】:

继承仍然意味着是一个,所以你说你的ITouchInterface 是一个画布。听起来不对。

正如 cmets 中所说,改为查看构图,这意味着 具有。所以你的触摸界面有一个画布。这听起来已经更好了,但似乎仍然不完全正确。重新思考您的设计,看看 ITouchInterface 的客户真正需要什么。他们需要整个 Canvas,还是只需要一些在其上绘制的方法,您可以轻松地将其放入另一个界面中?

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 2011-10-05
    • 2014-03-09
    • 2014-02-23
    • 1970-01-01
    • 2011-06-02
    • 2023-03-26
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多