[英]why `Private Sub` instead of `Public Sub`
我已經搜索了Private Sub
, Public Sub
和Sub
之間的區別,以確保我必須使用什么。
我有一個問題,為什么我們不使用Public Sub
而不是Private Sub
? 可以從任何模塊訪問Public Sub
而Private Sub
只限於這個小地方
文件1:
Module ModuleA
Public Sub Test()
messagebox.show("Message from Public Sub")
End Sub
End Module
檔案2:
Module ModuleB
Private Sub Run_Public_Sub Handles Button.Click
Test()
End Sub
End Module
決定是否全部使用“ Private
不是Public
取決於所聲明內容的預期范圍。 是的,使用帶有Sub
Public
意味着可以在大多數地方引用該代碼,這似乎是個好主意,但這樣做可能會導致不良的結果。
例如,如果我將所有Sub
都創建為Public
,則可能會無意間調用一個Sub
,該Sub
依賴於不存在的東西,這將在運行時導致NullReferenceException
。 請參見以下示例:
Class fooBar
Private Property myPrivateProperty As String
Public Property myPublicProperty As String
Public Property myValue As String
Public Sub New()
myPublicProperty = "Hello"
End Sub
Public Sub callThisSubFirst()
myPrivateProperty = "World"
setValue()
End Sub
Public Sub setValue()
myValue = myPublicProperty.ToUpper & myPrivateProperty.ToUpper
End Sub
End Class
如您在上面的示例中看到的,我在fooBar
類的所有Sub
上使用了Public
修飾符。 如果我在調用callThisSubFirst()
setValue()
方法之前先調用setValue()
方法,則會發生NullReferenceException
因為我試圖在未實例化的字符串對象上調用.ToUpper
字符串擴展。
Sub Main()
Dim test As New fooBar
test.setValue() ' NRE will occur here
Console.WriteLine(test.myValue)
End Sub
應該發生的是,應已調用callThisSubFirst()
方法以實例化myPrivateProperty
並且只有在此之后才應調用setValue()
方法。 如果我將setValue()
方法標記為Private
那么當我試圖在類外調用setValue()
時,我將收到一條錯誤消息,指出setValue()
在上下文中不可用。 由於setValue()
取決於正在執行的callThisSubFirst()
方法,因此正是發生這種情況。 代碼的編寫方式如下:
Class fooBar
Private Property myPrivateProperty As String
Public Property myPublicProperty As String
Public Property myValue As String
Public Sub New()
myPublicProperty = "Hello"
End Sub
Public Sub callThisSubFirst()
myPrivateProperty = "World"
setValue()
End Sub
Private Sub setValue()
myValue = myPublicProperty.ToUpper & myPrivateProperty.ToUpper
End Sub
End Class
這是應該如何使用的:
Sub Main()
Dim test As New fooBar
test.callThisSubFirst() ' Hurray, no exceptions!
Console.WriteLine(test.myValue)
End Sub
這只是將所有內容標記為“ Public
會導致應用程序出現問題的一個示例。 這樣做還有很多其他原因,但都不是理想的解決方案,最大的原因是可維護性。 如果所有內容在一個類中都標記為Public
,並且需要對單個方法進行少量更改,則需要檢查整個代碼庫,以確認該更改不會影響其他可能期望原始行為的調用方。 如果將方法或函數標記為“ Private
開始,則唯一需要檢查的代碼是駐留在同一范圍內的代碼。
您似乎了解了公共和私有之間的區別,這是一個好的開始。 是的,你可以使用公共 私人的地方可以使用,但是這並不一定是好事。 我認為同時使用這兩種訪問級別的主要原因是可維護性。 從類或模塊外部可以訪問的代碼更改可能導致其他類和組件的其他更改。 通過在整個應用程序中引起多次更改,這會使代碼修改變得復雜。 對私有例程的更改只能直接影響包含它的類或模塊。 將例程設為私有可以防止其他開發人員直接使用它們。 這樣一來,該類的開發人員就可以釋放對私有代碼的更改,而不必擔心這可能會對其他開發人員產生不利影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.