2017-04-05 17 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에서 작업하고 같이 안 들려요 액세스 swYandexErrors을 컴파일러 오류가 발생 않습니다 다음 : 여담으로

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

: 당신은 심지어하지는 귀하의 방법에 ref 키워드가 필요합니다. 을 다시 할당하고 StreamWriter을 다시 할당하십시오. 당신이하는 일은 전달 된 인스턴스에서 멤버를 호출하는 것입니다.

+0

입니다. 네, 그게 참조 유형이 아니기 때문에 심판이 필요 없다는 것을 알고 있습니다. 그러나 ref를 쓰면 그것을 읽을 때 명시 적으로 더 명확하게됩니다. – MonsterMMORPG

+0

당신의 인스턴스를 호출하거나 변경하고 있는지 확인하기 위해 이것을하지 마십시오. 이 게시물을 참조하십시오 : http://stackoverflow.com/questions/41802039/pass-reference-type-by-reference-to-indicate-it-will-be-modified – HimBromBeere

+0

하지만 visual studio는 어떤 객체가 참조 유형인지 명시 적으로 표시하지 않습니다. 아닙니다. 그래서 나는 또한 단지 확신하고 싶다. 또한 내가 왜 심판을 제공하는 것이 좋지 않을지 모르겠다. – MonsterMMORPG