2

在 C# 中,可以避免这种情况:

interface IImpliedReadOnly
{
    int SomeNumber { get; }
}

class Implementation : IImpliedReadOnly
{
    private int someNumber = 0;

    public int SomeNumber
    {
        get { return this.someNumber; }
        set { this.someNumber = value; }
    }
}

但我找不到在 VB 中执行此操作的等效方法。如果我在接口 ReadOnly 中设置属性,则实现类必须匹配这些访问权限并将属性声明为 ReadOnly,而不是像在 C# 中那样实现 getter 和 setter。

有没有办法解决?如果没有,为什么 VB 不允许呢?

4

3 回答 3

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' 中找不到的访问器

于 2013-10-05T06:07:11.747 回答
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
于 2013-10-05T20:07:04.050 回答
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
于 2013-10-05T05:40:48.747 回答