2012-03-13 130 views
0

這是第一種方式:策略創建

Public Class MyClass 
    Private _Property As String 

    Property Property() As String 
     Get 
      Return _Property 
     End Get 
     Set(ByVal Value As String) 
      _Property = Value 
     End Set 
    End Property 

    Public Function DoSomething() As String 
     Return _Property & Now() 
    End Function 
End Class 

我也能做到這樣:

Public Class MyClass 

    Public Property As String 

    Public Function DoSomething() As String 
     Return Property & Now() 
    End Function 

End Class 

哪種方式最好?

回答

2

較短的方法是首選(由我),因爲它更容易閱讀和理解。如果你需要做一些特別的事情,你可以隨時切換到一個完全寫作的屬性定義。

雖然有些言論。

您應該始終在代碼中使用屬性getter(Property)。切勿使用內部變量(_Property)。這很重要,因爲通過這種方式,所有與該內部變量的交互都通過一個您可以輕鬆修改的單點。也許你想格式化屬性,或者在值不正確時拋出異常等。所以DoSomething函數在兩種方法中都應該完全相同。

Public Function DoSomething() As String 
    Return Me.Property & Now() 
End Function 

最後,屬性速記不正確。它應該是:

Public Property [Property] as String 

你沒有給它起個名字。我假設你想把它命名爲'財產'。我認爲這是一個保留字,因此您可能會遇到問題。通過像這樣聲明它,編譯器不會絆倒它。但是,您應該明智地避免在您的類&方法名稱中使用保留字。

1

首先,我會正確地拼寫MyClass

如果用自己的方式完成微軟建議是什麼,然後你的方式是首選。你的代碼簡短而甜蜜。不過,只有當你對發生的事情有強烈的理解時,我纔會建議你按照自己的方式去做。當我沒有必要的時候,我已經在路上跑了很多次了。

+0

對不起,我輸入的很快。 – Maysam 2012-03-13 13:48:01

+0

不用擔心。回答你的問題是重要的。 – 2012-03-13 13:49:17

2

的回答你的問題取決於你想才達到什麼......

在第一種方式,你「隱藏」,從「用戶」的信息。如果你爲自己編寫代碼,而且你確切地知道你做了什麼,那麼你可以像第二種方式那樣做。

但最常見的是使用公共屬性的風格很差。因爲當你這樣做時,你失去了對公共財產的控制,因爲任何人都可以改變它,而不使用getter/setter。

所以,如果你喜歡一個API寫的東西,你不應該使用的公共屬性,因爲要嚴格限制訪問您的屬性...

例如:如果你使用第一種方式,但刪除Set方法並在構造函數中自己初始化屬性。那麼沒有辦法從外面改變房產,因爲它是私人的。但是你仍然可以從外部世界「詢問」你的課程,Get(),你將會收到你所定義的內容。

信息隱藏被使用,以防止其他「啞巴」程序員濫用類和獲取錯誤的結果...

+0

如果你想隱藏外部類的屬性,你不會只使用'私有屬性'嗎?你的回答對我來說沒有多大意義,對不起。代碼隱藏很重要,但這不是問題。最重要的是讓所有東西都通過屬性,只有屬性本身而不是內部變量。如果你想稍後改變setter或getter的內部行爲,你可以手動寫出它。但是一定要確保你通過制定者和獲得者。 – SpoBo 2012-03-13 14:07:27

+0

@SpoBo問題更復雜......當然你也是對的。您可以使用第二種方式並將LOC保存。但是當你在一家大公司工作,而其他人在以後使用/維護/改進你的代碼時,他們總會犯錯。而你的第一句話:我強烈反對!你應該反過來看看:如果你有很強的理由(而且對我來說只有很少的理由),你應該公開一個財產。默認應該是私人的! – Sauer 2012-03-13 14:26:20

+0

我同意只有在您認爲在課堂以外需要該資產時,該資源才應該公開。只對班級內部代碼重要的東西應該是私人的。但是,只需將'Private Property [PropertyName]'寫爲String'即可。如果您需要公開提供私有屬性,請使用不同名稱創建一個只讀返回私有屬性的新ReadOnly屬性。無論如何,這個討論是完全偏離軌道的:p問題簡單得多。 – SpoBo 2012-03-13 14:56:58