2017-04-05 2 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ないクラス csLoggerでの仕事とあなたのようcan'tアクセス swYandexErrorsをコンパイラエラーが発生しない、次はさておきとして

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

:あなたもドントあなたの方法でrefキーワードが必要です。を再割り当てします。StreamWriterを割り当ててください。あなたがやっているのは、渡されたインスタンス上のメンバーを呼び出すことだけです。

+0

です。はい、私はそれが参照型だからref wordを必要としないことを知っているが、refを置くと明示的にもっと読むことができます:) – MonsterMMORPG

+0

あなたのインスタンスのメンバーを呼び出すか変更したことを確認するためにこれをしないでください。この記事を参照してください:http://stackoverflow.com/questions/41802039/pass-reference-type-by-reference-to-indicate-it-will-be-modified – HimBromBeere

+0

しかし、Visual Studioはどのオブジェクトが参照タイプであるかを明示的に示していませんか否か。だから私はちょうど確かにしたい。また、なぜ私はref wordを与えることが悪いかもしれませんか? – MonsterMMORPG

関連する問題