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吗?