2017-04-05 43 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

相关问题