为什么VB.NET中的实现属性必须匹配'ReadOnly'说明符?

Hei*_*nzi 5 .net c# vb.net properties interface

以下适用于C#:

interface I
{
    int X { get; }
}

class C : I
{
    public int X
    {
        get { ... }
        set { ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下在VB.NET中不起作用:

Interface I
    ReadOnly Property X As Integer
End Interface

Class C
    Implements I

    Public Property X As Integer Implements I.X
        Get
            ...
        End Get
        Set(value As Integer)
            ...
        End Set
    End Property
End Class
Run Code Online (Sandbox Code Playgroud)

错误信息Implementing property must have matching 'ReadOnly' or 'WriteOnly' specifiers非常明显,所以我知道这里有什么问题.这也不是一个大问题,因为解决这个限制很容易.

不过我很好奇:有谁知道为什么VB设计师决定以不同于C#的方式处理这种情况?

Jam*_*are 3

我不确定 VB 方面的情况,但是通过 C# 中 IX 的显式接口实现,您还会收到有关添加的 setter 的抱怨:

interface I
{
    int X { get; }
}

class C : I
{
    int I.X  // explicit implementation of I.X
    {
        get { return 1; }
        set { }
    }
}
Run Code Online (Sandbox Code Playgroud)

在 C# 中您会遇到类似的错误。对于 VB,可能想查看这个 SO 线程:如果接口定义了只读属性,那么实现者如何为该属性提供 Setter?