没有Get和Set的VB属性声明是否与C#相同?

时间:2017-05-01 20:37:11

标签: c# vb.net

这个问题是关于不同类型的VB属性声明语法创建的内容。但首先我想在某些上下文中引用C#。我对C#不是很有能力,但我看到我们可以写:

public string myString {get; set;}

该行与下面的行相同,后者具有显式声明的阻塞变量:

public string myString {
    get { return m_myString; }
    set { m_myString = value; }
}
private string m_myString;

现在转到VB,下面的VB和这篇帖子顶部的第一行C#相同吗?

Public Property myString() As String

或者我们必须按照以下方式编写所有内容:

Public Property myString() As String
    Get
        Return m_myString
    End Get
    Set
        m_myString = Value
    End Set
End Property

Private m_myString As String

这个问题实际上不是关于是否想要使用支持变量,而是关于声明属性的语法如何在VB中工作。

2 个答案:

答案 0 :(得分:0)

是的,C#public string MyString { get; set; }相当于VB.NET中的Public Property MyString() As String

注意,属性名称应该是上层驼峰案例,AKA Pascal案例。

答案 1 :(得分:0)

它们并不完全相同。 VB.Net为名为myString的自动实现的属性_myString生成隐藏的私有支持字段。这个例子将编译:

Public Property myString As String

Public Function Foo() As String
    Return myString
End Function

Public Function _Foo() As String
    Return _myString
End Function

在C#中尝试相同的操作。它没有编译。

public string myString { get; set; }

public string Foo()
{
    return myString;
}

public string _Foo()
{
    return _myString; //The name '_myString' does not exist in the current context
}

然后,您可以在C#中声明字段_myString,但不能在VB.Net中声明。

<强>因此

Private _myString As String

Public Property myString As String
    Get
        Return _myString
    End Get
    Set
        _myString = Value
    End Set
End Property

<强> =

Public Property myString As String

<强> =

private string _myString;

public string myString
{
    get { return _myString; }
    set { _myString = value; }
}

!= &lt;&gt; 为您提供VB.Net人员)

public string myString { get; set; }