2009-11-06 2 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() 
    { 

    } 
} 

컴파일러는 형태로 구현되는 숨기기()와 쇼() 알고 있고 위의 코드는 잘 컴파일합니다. 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'에 대해 'Sub Hide()'를 구현해야한다고 불평합니다. 실제로 다음을 추가해야합니까?

Public Sub Hide1() Implements FormInterface.Hide 
    Hide() 
End Sub 
내 모든 형태에

, 또는 더 나은 경로는 SetupForm를 (이 추상 기본 클래스)를 만드는 (당신은 VB.NET에서 어떻게 그렇게합니까)?

+0

@ Kris Erickson : 나는이 "암시 적 구현"을 얻지 못했습니다 ... 어쨌든 인터페이스는 기본 클래스에 대한 반대마다 완벽하게 구현되어야합니다. 인터페이스는 구현을 파생 클래스로 강제 설정합니다. 이 메서드를 추가하려는 경우 VBNET의 MustInherit 클래스를 사용하는 것이 좋습니다. 이 정도면 충분합니까? –

답변

0

Form1 구성원의 Form 클래스의 보호 된 멤버를 사용하려는 경우가 아니면 상속 대신 포함 관계를 사용합니다. 따라서 FormInterfaceIFormWrapper과 같은 이름으로 지정하면 구현이 다음과 같이됩니다 (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를 만들지 마십시오.

관련 문제