C#接口行为的VB等价物
在C#中,有可能不受此影响:C#接口行为的VB等价物,c#,.net,vb.net,C#,.net,Vb.net,在C#中,有可能不受此影响: interface IImpliedReadOnly { int SomeNumber { get; } } class Implementation : IImpliedReadOnly { private int someNumber = 0; public int SomeNumber { get { return this.someNumber; } set { this.someNumbe
interface IImpliedReadOnly
{
int SomeNumber { get; }
}
class Implementation : IImpliedReadOnly
{
private int someNumber = 0;
public int SomeNumber
{
get { return this.someNumber; }
set { this.someNumber = value; }
}
}
但是我在VB中找不到一种等效的方法来实现这一点。
如果我将接口中的属性设置为只读,那么实现类必须匹配这些访问权限,并将属性声明为只读,而不是像C#中那样实现getter和setter
这有什么办法吗?
如果没有,为什么VB不允许呢?现在试试这个
Interface IImpliedReadOnly
ReadOnly Property SomeNumber() As Integer
End Interface
Class Implementation
Implements IImpliedReadOnly
Private m_someNumber As Integer = 0
Public Property SomeNumber() As Integer Implements IImpliedReadOnly.SomeNumber
Get
Return m_someNumber
End Get
Set
m_someNumber = value
End Set
End Property
End Class
您的代码在C中工作,因为C支持隐式接口实现,VB.NET只支持显式接口实现。
如果使用显式接口实现对C#示例进行以下改编,则会出现以下错误:
代码:
错误:
错误1“Test.IImpliedArdorOnly.SomeNumber.set”不添加访问器
在接口成员“Test.iImpliedArderOnly.SomeNumber”中找到
实际上,您可以使用以下VB代码:
Friend Interface IImpliedReadOnly
ReadOnly Property SomeNumber() As Integer
End Interface
Friend Class Implementation
Implements IImpliedReadOnly
Private someNumber_Renamed As Integer = 0
Private ReadOnly Property IImpliedReadOnly_SomeNumber() As Integer Implements IImpliedReadOnly.SomeNumber
Get
Return SomeNumber
End Get
End Property
Public Property SomeNumber() As Integer
Get
Return someNumber_Renamed
End Get
Set(ByVal value As Integer)
someNumber_Renamed=value
End Set
End Property
End Class
将返回值1替换为返回值m_someNumber@Rony:您所做的只是演示Pharap询问的问题。@Pharap是的,这不是您的代码。我想向您展示,如果使用显式接口实现,C#和VB.NET的行为方式是相同的。
Friend Interface IImpliedReadOnly
ReadOnly Property SomeNumber() As Integer
End Interface
Friend Class Implementation
Implements IImpliedReadOnly
Private someNumber_Renamed As Integer = 0
Private ReadOnly Property IImpliedReadOnly_SomeNumber() As Integer Implements IImpliedReadOnly.SomeNumber
Get
Return SomeNumber
End Get
End Property
Public Property SomeNumber() As Integer
Get
Return someNumber_Renamed
End Get
Set(ByVal value As Integer)
someNumber_Renamed=value
End Set
End Property
End Class