VB相当于c#“属性反抗”

时间:2013-10-05 05:33:10

标签: c# .net vb.net

在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不允许它?

3 个答案:

答案 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