2017-04-05 82 views
-1

我只注意到我能夠通過參考私人對象傳遞給另一個類我怎樣才能通過引用傳遞私人對象到另一個類?

我想這不應該是可能的,但它工作正常

下面的例子

private static StreamWriter swYandexErrors; // in classA 

csLogger.logAnyError(ref swYandexErrors, $"msg", E); // in classA 

// in class csLogger 
    public static void logAnyError(ref StreamWriter swError, 
string srError, Exception E = null) 
    { 
     lock (swError) 
     { 
      swError.WriteLine(""); 
      swError.Flush(); 
     } 
    } 
+1

爲什麼你會期望這是不可能的? 'private'隱藏了它聲明的類之外的類的值。您仍然可以將它傳遞給該類中的函數。 – DarthJam

+0

@DarthJam所以傳入其他類不是問題。我看到 – MonsterMMORPG

+0

問題是什麼?你仍然在你的classA中調用它。如果你可以從classA之外傳遞它:一個ClassA或另一個類的實例,這是問題。 – TriV

回答

5

private意味着變量,而不是實際實例,即被該變量所引用。所以參考swYandexErrors這是private在你的課堂當然是不可見的另一個。但是,當您通過引用傳遞實例時,您當然可以訪問您的第一課程中的實例

更清晰的下列情況中csLogger工作,並會導致編譯器錯誤,你不容訪問swYandexErrorscsLogger

public static void DoSomething() 
{ 
    ClassA.swYandexErrors.Read(); 
} 

順便說一句:你甚至鴕鳥政策需要ref - 您的方法的關鍵字,因爲您不要重新分配通過StreamWriter。您所做的只是在傳遞的實例上調用成員。

+0

ty爲答案。是的,我知道我不需要引用詞,因爲它是引用類型,但是把ref使得在閱讀時明確更清楚:) – MonsterMMORPG

+0

不要這樣做來確定你是在調用還是在更改實例的成員。看到這篇文章:http://stackoverflow.com/questions/41802039/pass-reference-type-by-reference-to-indicate-it-will-be-modified – HimBromBeere

+0

但visual studio沒有明確顯示哪些對象是引用類型或不。所以我只想確定一下。我也沒有得到爲什麼它可能是壞的給予ref詞? – MonsterMMORPG

相關問題