Vb.net 一个接口的例子?

Vb.net 一个接口的例子?,vb.net,interface,Vb.net,Interface,我有一个班级,应该用一个表格做不同的事情 因为这些“东西”是特定于表单的,所以我将对表单的引用存储为: Friend Class clsEdit Private m_Form As frmMain Public Sub New(ByRef uForm As frmMain) m_Form = uForm End Sub MyEditClass.DoThings() Public Sub DoThis() m_Form.SetHookPaused(True)

我有一个班级,应该用一个表格做不同的事情

因为这些“东西”是特定于表单的,所以我将对表单的引用存储为:

Friend Class clsEdit

    Private m_Form As frmMain
Public Sub New(ByRef uForm As frmMain)

    m_Form = uForm

End Sub
MyEditClass.DoThings()
Public Sub DoThis()

    m_Form.SetHookPaused(True) 
    m_Form.StopCommonTimers()

End Sub

Protected Overrides Sub Finalize()
    m_Form.DoSomethingThatOnlyThisFormCanDo()
End Sub
我像这样把它传给全班同学:

Friend Class clsEdit

    Private m_Form As frmMain
Public Sub New(ByRef uForm As frmMain)

    m_Form = uForm

End Sub
MyEditClass.DoThings()
Public Sub DoThis()

    m_Form.SetHookPaused(True) 
    m_Form.StopCommonTimers()

End Sub

Protected Overrides Sub Finalize()
    m_Form.DoSomethingThatOnlyThisFormCanDo()
End Sub
现在,当我的班级应该做这些“事情”时,我是这样做的:

Friend Class clsEdit

    Private m_Form As frmMain
Public Sub New(ByRef uForm As frmMain)

    m_Form = uForm

End Sub
MyEditClass.DoThings()
Public Sub DoThis()

    m_Form.SetHookPaused(True) 
    m_Form.StopCommonTimers()

End Sub

Protected Overrides Sub Finalize()
    m_Form.DoSomethingThatOnlyThisFormCanDo()
End Sub
内部看起来是这样的:

Friend Class clsEdit

    Private m_Form As frmMain
Public Sub New(ByRef uForm As frmMain)

    m_Form = uForm

End Sub
MyEditClass.DoThings()
Public Sub DoThis()

    m_Form.SetHookPaused(True) 
    m_Form.StopCommonTimers()

End Sub

Protected Overrides Sub Finalize()
    m_Form.DoSomethingThatOnlyThisFormCanDo()
End Sub
我现在希望能够以不同的形式使用clsEdit。 另一种形式也有函数“DoThings”和“dosomethingthattonlythiscando”

但是,当我将m_表的声明更改为

Private m_Form As Form
。。。我不能再这样做了:

m_Form.DoThings()
。。。因为“DoThings”不是“Form”的属性/函数

当我把它改成这个:

Private m_Form As frmOther
。。。我不能再那样做了:

Public Sub New(ByRef uForm As frmMain)

    m_Form = uForm

End Sub
有人能告诉我怎么做吗?

创建您的界面:

Public Interface IFormStuff
  Sub SetHookPaused(value As Boolean)
  Sub StopCommonTimers()
End Interface
将窗体变量替换为类中的接口变量:

Public Class clsEdit
  Private m_Form As IFormStuff

  Public Sub New(f As IFormStuff)
    m_Form = f
  End Sub

  Public Sub DoThis()
    m_Form.SetHookPaused(True)
    m_Form.StopCommonTimers()
  End Sub
End Class
以每种形式实现接口:

Public Class Form1
  Implements IFormStuff
每个表单都需要实现这些接口存根:

Public Sub SetHookPaused(value As Boolean) Implements IFormStuff.SetHookPaused
  ' do something
End Sub

Public Sub StopCommonTimers() Implements IFormStuff.StopCommonTimers
  ' do something
End Sub
然后需要在表单级别创建类:

Private myEdit As clsEdit = Nothing

Protected Overrides Sub OnLoad(e As EventArgs)
  MyBase.OnLoad(e)
  myEdit = New clsEdit(Me)
End Sub
这就是它的要点。

创建您的界面:

Public Interface IFormStuff
  Sub SetHookPaused(value As Boolean)
  Sub StopCommonTimers()
End Interface
将窗体变量替换为类中的接口变量:

Public Class clsEdit
  Private m_Form As IFormStuff

  Public Sub New(f As IFormStuff)
    m_Form = f
  End Sub

  Public Sub DoThis()
    m_Form.SetHookPaused(True)
    m_Form.StopCommonTimers()
  End Sub
End Class
以每种形式实现接口:

Public Class Form1
  Implements IFormStuff
每个表单都需要实现这些接口存根:

Public Sub SetHookPaused(value As Boolean) Implements IFormStuff.SetHookPaused
  ' do something
End Sub

Public Sub StopCommonTimers() Implements IFormStuff.StopCommonTimers
  ' do something
End Sub
然后需要在表单级别创建类:

Private myEdit As clsEdit = Nothing

Protected Overrides Sub OnLoad(e As EventArgs)
  MyBase.OnLoad(e)
  myEdit = New clsEdit(Me)
End Sub

这就是它的要点。

表单已经是一个类了。您可以将方法添加到表单中,而不是将其塞进另一个类中。不确定界面在您的帖子中是如何发挥作用的。是的,如果您有两个具有相同方法和函数的不同表单,那么请创建一个接口并使用它。对于这种情况,您能给我一个接口的kickstart吗?表单已经是一个类了。您可以将方法添加到表单中,而不是将其塞进另一个类中。不确定界面在你的帖子中是如何发挥作用的。是的,如果你有两个不同的表单,具有相同的方法和函数,那么创建一个界面并使用它。你能给我一个关于这种情况的界面的kickstart吗?