2012-08-29 42 views
0

這兩個片段有什麼區別?在VB中聲明屬性的兩種方式 - 有什麼區別?

Public Property UserName As String 

Public Property User As String 
    Get 
     Return _User 
    End Get 
    Set(ByVal value As String) 
     _User = value 
    End Set 
End Property 

我很抱歉,如果這是一個重複的或愚蠢的問題。我不習慣VB.NET,我更習慣於C#。我正試圖將其轉換爲C#,並且我沒有犯錯的餘地。

+5

第一個是短 – CodesInChaos

+0

http://msdn.microsoft.com/en-us/library/ dd293589.aspx – Dominik

回答

3

沒有區別。第一個只是第二個簡短的版本。

但是,如果您想要限制setter或在屬性中執行更多操作,而不是獲取/設置變量,則需要使用第二個版本。

因此,它是一樣的(在C#)

public string UserName { get; set; } 

Auto-Implemented Properties (Visual Basic)

Auto-Implemented Properties (C# Programming Guide)

+0

我覺得這個功能獨家到C#。謝謝。 – codingbiz

+0

有沒有辦法有一個VB自動財產能見度較低二傳手?如果沒有,這個功能聽起來很沒用。 – CodesInChaos

+0

@CodesInChaos:如果你需要有對的getter/setter不同的訪問級別,您需要使用第二種方法。但你可以在短版吧'readonly'和VB.NET指定默認值(不像在C#)。 –

1

其中之一是縮短:)

在第一種情況下,它是一個自動實現的屬性,做同樣的事情作爲第二種情況,除了你不能看到或使用支持字段。

C#的等效,順便說一下,就是:

public string UserName { get; set; } 
1

這僅僅是VB version of automatically implemented properties

所以C#相當於是:

public string UserName { get; set; } 

注意,VB允許默認值,自動實現的屬性,而C#不 - 你需要的屬性在構造函數中設置爲默認值。

+0

有趣的是,該示例顯示VB自動屬性可以在同一行上獲取默認值,而它們必須在C#中的構造函數中設置。 –

+0

我不知道在VB.Net中有這個等價物。我認爲這是C#專有的。由於 – codingbiz

+0

我將測試_「而C#不 - 你需要的屬性設置爲構造函數中的默認值」 _確認 – codingbiz

4

第一個(自動實現的屬性)將自動爲您創建後臺字段,因此您不必自己聲明_User,如第二個示例中所示。

MSDN

當你聲明一個自動實現的屬性時,Visual Basic 自動創建一個隱藏的私有字段稱爲支持字段 包含的屬性值。背景字段名稱是以下劃線(_)開頭的 自動實現的屬性名稱。例如,對於 示例,如果聲明名爲ID的自動實現的屬性,則 支持字段被命名爲_ID。

+0

唯一的答案,至少提'_User' –

相關問題