首先,「封裝」根本就不是你正在做的事情。你正在談論製作副本。在編程中,「封裝」意味着隱藏該字段並使每個人都可以通過某種類型的代碼訪問它。在C#中,幾乎總是意味着一個屬性(這實際上只是通過語法糖僞裝的方法調用)。在其他語言中,它可能是顯式獲取和設置方法。
所以。你應該複印一份嗎?
是:
private int _from = 9;
public void f(int to)
{
for (int i = _from; i < to; ++i)
{
// stuff
}
}
號:
public f2()
{
Console.WriteLine("from is {0}", _from);
}
如果你想,你使用它正在改變的價值,但你不希望私人領域的改變,製作本地副本並改變它。
但請注意:值類型(例如int
)的行爲與可變參考類型(如SqlConnection
(見下文))的行爲非常不同。
如果你不會改變它,不要浪費你的時間。事實上,如果這個字段是一個引用類型,並且你創建了一個本地引用,那麼有人維護你的代碼會因此而誤認爲本地對象,並錯誤地認爲對它的修改不會產生類的影響。
private SqlConnection _conn = null;
public MyClass()
{
_conn = new SqlConnection();
}
public void f3()
{
var c = _conn;
// 150 lines of stuff
// OK, I guess we're done with it now!
c.Dispose();
c = null;
// Now _conn is not null, yet the next call to f3() will find it unexpectedly
// in an invalid state. You really don't want that.
}
你從哪裏得到這個想法?
這樣做的結果是什麼?我不清楚爲什麼你會創建你已有的變量。 – David
只適用於一個乾淨的命名。但我問這個問題,以瞭解我是否正確! – CRK
''只爲一個乾淨的命名'' - 命名類級別的成員's'並且問題變得沒有意義。如果現有的代碼需要改進,那麼改進現有的代碼。不要編寫更多代碼來混淆你想修復的代碼,只需修復它。 – David