如何将以下代码转换为VB.NET?
class A
{
public int NumberA { get; set; }
}
class B : A, I
{
public int NumberB { get; set; }
}
interface I
{
int NumberA { get; set; }
int NumberB { get; set; }
}
在VB.NET中,属性声明后的Implements关键字存在问题。所以我需要做这样的事情:
Class B
Inherits A
Implements IC
Public Property NumberB() As Integer Implements IC.NumberB
Get
Return m_NumberB
End Get
Set(ByVal value As Integer)
m_NumberB = value
End Set
End Property
Private m_NumberB As Integer
Public Property NumberA1() As Integer Implements IC.NumberA
Get
Return MyBase.NumberA
End Get
Set(ByVal value As Integer)
MyBase.NumberA = value
End Set
End Property
End Class
但是存在重复的误导性属性NumberA1。有什么方法可以更聪明地做到这一点吗?
答案 0 :(得分:1)
是的,vb.net不支持。与C#不同,编译器要求使用显式的Implements关键字实现接口。你能得到的最接近的是:
Interface ICA
Property NumberA() As Integer
End Interface
Interface ICB
Property NumberB() As Integer
End Interface
Class A
Implements ICA
Public Property NumberA() As Integer Implements ICA.NumberA
'' etc
End Property
End Class
Class B
Inherits A
Implements ICA, ICB
Public Property NumberB() As Integer Implements ICB.NumberB
'' etc...
End Property
End Class
请注意,B现在不再需要实现NumberA,即使它实现了ICA,也接受了A中的实现。但当然,这需要过多地修改原始定义。您使用的解决方法很好,并且在运行时没有任何不利影响。请注意,您可以将A1设为私有。
答案 1 :(得分:0)
您可以使用关键字' Shadows'强制从您的班级遮蔽旧属性。
所以也许这对你没关系:
Public Class A
Public Property NumberA As Integer
End Class
Public Class B
Inherits A
Implements I
Public Shadows Property NumberA As Integer Implements I.NumberA
Get
Return MyBase.NumberA
End Get
Set(ByVal value As Integer)
MyBase.NumberA = value
End Set
End Property
Public Property NumberB As Integer Implements I.NumberB
End Class
Interface I
Property NumberA As Integer
Property NumberB As Integer
End Interface
答案 2 :(得分:0)
您还可以拥有继承自第一个接口的第二个接口:
Interface IA
Property NumberA() As Integer
End Interface
Interface IB
Inherits IA
Property NumberB() As Integer
End Interface
Class A
Implements IA
Public Property NumberA() As Integer Implements IA.NumberA
Get
Return m_NumberA
End Get
Set(ByVal value As Integer)
m_NumberA = value
End Set
End Property
Private m_NumberA As Integer
End Class
Class B
Inherits A
Implements IB
Public Property NumberB() As Integer Implements IB.NumberB
Get
Return m_NumberB
End Get
Set(ByVal value As Integer)
m_NumberB = value
End Set
End Property
Private m_NumberB As Integer
End Class