在C#中,可以逃脱这个:
interface IImpliedReadOnly
{
int SomeNumber {get;}
}
class Implementation : IImpliedReadOnly
{
private int someNumber = 0;
public int SomeNumber {get{return someNumber;}set{someNumber=value;}}
}
但我找不到在VB中执行此操作的等效方法。 如果我在接口ReadOnly中创建属性,实现类必须匹配这些访问权限,并将属性声明为ReadOnly,而不是像C#中那样实现getter和setter。
这有什么办法吗? 如果没有,为什么VB不允许它?
答案 0 :(得分:8)
您的代码在C#中工作,因为C#支持隐式接口实现, VB.NET仅支持显式接口实现。
如果使用显式接口实现实现以下C#示例的修改,则会出现以下错误:
代码:
interface IImpliedReadOnly
{
int SomeNumber { get; }
}
class Implementation : IImpliedReadOnly
{
private int someNumber = 0;
int IImpliedReadOnly.SomeNumber
{
get { return someNumber; }
set { someNumber = value; }
}
}
错误:
错误1'Test.IImpliedReadOnly.SomeNumber.set'不添加访问者 在接口成员'Test.IImpliedReadOnly.SomeNumber'
中找到
答案 1 :(得分:1)
实际上,您可以使用以下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
答案 2 :(得分:0)
现在试试这个......
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