c#和VB.NET的接口实现
本文关键字:接口 实现 NET VB | 更新日期: 2023-09-27 18:09:57
我在C#
项目中定义了一个接口:
public interface IForm
{
bool IsDisposed { get; }
void Show();
}
我在WinForms的C#
类中实现了它
public partial class Form1 : Form, IForm { }
由于方法Show()
和属性IsDisposed
已经存在于System.Windows.Forms.Form
类中,我不需要实现它。
但是在VB.NET
中不成立,在VB.NET
中我必须定义成员,否则会出现编译错误。
Public Class Form1
Implements WindowsFormsApplication1.IForm
Public ReadOnly Property IsDisposed1 As Boolean Implements WindowsFormsApplication1.IForm.IsDisposed
Get
End Get
End Property
Public Sub Show1() Implements WindowsFormsApplication1.IForm.Show
End Sub
End Class
为什么我必须在VB中定义接口成员。
VB没有隐式接口实现,只有显式接口实现,而c#两者都支持。
这意味着您必须明确地说明实现接口成员的成员是什么。这增加了一些灵活性,例如,您可以使实现接口成员的方法私有或受保护,并且可以给它一个不同于接口成员的名称。
您可以在这里阅读更多详细信息:http://ondevelopment.blogspot.se/2008/10/implementing-interfaces-in-vbnet.html
VB。. NET允许您以不同于它实现的函数/子的方式命名函数/子。这意味着您必须显式地将Implements <Function/Sub>
添加到签名的末尾。
在c#中你不能这样做,所以实现"只是工作"而不需要添加任何东西。
MSDN:
实现成员的形参类型和返回类型必须与接口中的接口属性或成员声明匹配。实现接口元素的最常见方法是使用与接口
同名的成员。
如果你想覆盖表单的标准方法并将其替换为接口中定义的方法,则使用shadows关键字,否则你需要使用不同的名称,因为它们被视为两个独立的方法。
Public Class Form1
Inherits Form
Implements IForm
Public Shadows Property IsDisposed As Boolean Implements IForm.IsDisposed
Public Shadows Sub Show() Implements IForm.Show
' replaces original method in Form class
End Sub
End Class
替代:Public Class Form2
Inherits Form
Implements IForm
Public Property IsDisposed1 As Boolean Implements IForm.IsDisposed
Public Sub Show1() Implements IForm.Show
Me.Show() ' Original method still exists and is accessible like this
End Sub
End Class