2009-11-06 97 views
5

在C#中,我可以創建一個接口,並且當我使用該接口時,編譯器知道某些接口需求由基類實現。這可能是用一個例子更清晰:如何在VB.NET中使用隱式實現創建接口

interface FormInterface 
{ 
    void Hide(); 
    void Show(); 
    void SetupForm(); 
} 

public partial class Form1 : Form, FormInterface 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public void SetupForm() 
    { 

    } 
} 

編譯器知道隱藏()和show()的形式實現和上面的代碼編譯就好了。我無法弄清楚如何在VB.NET中做到這一點。當我嘗試:

Public Interface FormInterface 
    Sub Hide() 
    Sub Show() 
    Sub SetupForm() 
End Interface 


Public Class Form1 
    Inherits System.Windows.Forms.Form 
    Implements FormInterface 

    Public Sub SetupForm() Implements FormInterface.SetupForm 

    End Sub 

End Class 

但編譯器抱怨說Form1中必須實現「子隱藏()」對接口「FormInterface」。我是否需要添加以下內容?

Public Sub Hide1() Implements FormInterface.Hide 
    Hide() 
End Sub 

在我的所有形式,或者是一種較好的途徑創建具有SetupForm(抽象基類)(和你怎麼做,在VB.NET)?

+0

@Kris Erickson:我沒有得到這個「隱含的實現」的東西......無論如何,我猜接口必須完全實現,因爲它們與基類相對。一個接口將其實現強制爲一個派生類。如果你只想添加這些方法,我可能會考慮一個基本的抽象類(VBNET中的MustInherit)。這是否足夠滿足您的需求? – 2010-02-10 14:55:05

回答

0

除非您打算在Form1成員中使用Form類的受保護成員,否則我將使用包含關係而不是繼承。所以,你將有你的FormInterface名字類似IFormWrapper,而是和你的實現是這樣的(我展示它在C#中,因爲這是我的工作語言,我想你將能夠翻譯的想法VB):

public class Form1 : IFormWrapper 
{ 
    private readonly Form form; 

    public Form1 { 
     this.form=new Form(); 
    } 

    public void Show() { 
     form.Show(); 
    } 

    public void Hide() { 
     form.Hide(); 
    } 

    public void SetupForm() { 
     //Code for the setup method 
    } 
} 

畢竟,如果你正準備通過FormInterface類使用Form1情況下,你將不得不比ShowHide其他Form成員的訪問權限。

2

不,System.Windows.Forms.Form沒有實現FormInterface,因此VB.NET不知道它們匹配。 VB.NET不會執行隱式接口實現,只是顯式的。

是的,你應該創建一個基類並實現你的接口。但是,我會將它們命名爲稍有不同。也許DoShowDoHide

事情是這樣的:

Public Class BaseForm 
    Inherits System.Windows.Forms.Form 
    Implements FormInterface 

    Public Sub SetupForm() Implements FormInterface.SetupForm 

    End Sub 

    Public Sub DoShow() Implements FormInterface.DoSHow 
     Me.Show() 
    End Sub 

    Public Sub DoHide() Implements FormInterface.DoHide 
     Me.Hide() 
    End Sub 

End Class 

你還能意外做到這一點:

Public Class BaseForm 
    Inherits System.Windows.Forms.Form 
    Implements FormInterface 

    Public Sub SetupForm() Implements FormInterface.SetupForm 

    End Sub 

    Public Sub Show() Implements FormInterface.SHow 
     Me.Show() 
    End Sub 

    Public Sub Hide() Implements FormInterface.Hide 
     Me.Hide() 
    End Sub 

End Class 

而這會和好如初。

不要使基類MustInherit,因爲表單設計器不會那樣。