簡體   English   中英

將實例變量傳遞給實例方法而不是直接訪問它們?

[英]Passing instance variables to instance methods vs. directly accessing them?

想象一下,我有一個帶有實例成員的類

String instanceMember;

此外,我有4個實例方法訪問此成員。 現在我想知道是否有任何真正的pro / con從實例方法直接訪問實例成員或將實例成員作為參數傳遞給每個實例方法?

將值作為參數傳遞將意味着您將使用參數值而不是封裝值執行計算。

如果您要對封裝數據進行操作,則沒有理由將其作為參數。

首先使用實例變量的原因是為了避免將它們作為參數傳遞:您的實例方法可以“免費”訪問它們,因為它們已經在方法的范圍內。

但是,將實例變量傳遞給方法有兩個原因:

  • 該方法是static - 類方法無法訪問實例變量,因此您需要顯式傳遞它們,或者傳遞要操作的對象
  • 您需要使用按值傳遞語義 - 換句話說,您希望修改傳入的值,並且您希望避免創建局部變量。 當方法是遞歸時,通常就是這種情況。

如果您發現自己編寫的遞歸代碼修改了一個以實例變量開頭的參數,在許多情況下,將您的方法設為private static是一個好主意,並添加一個public實例方法來啟動遞歸鏈並收集結果。

如果這些方法是操縱持久成員變量狀態的公共方法,那么你不應該真正傳遞它。 例如,如果您必須執行以下操作,則可能應該由方法直接操作而不是傳入:

myObject.SomeMethod(myObject.instanceMember, 15);

這應該只是:

myObject.SomeMethod(15);

如果它是每次調用可能改變的東西(例如,上面方法中的神秘15 ),你會想要傳遞它。

這將取決於你如何使用它。 如果你的課程用量很少,那么就沒有明顯的區別。

如果你經常使用類實例,並且通過許多線程,那么在某些情況下,將它作為參數傳遞會更快一些。

通常,實例成員由具有靜態函數擴展的類成員直接訪問(由於顯而易見的原因)。

因此,請遵循您的編碼約定,不要擔心。 到了真正重要的時候,你會心里明白答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM