我如何通过引用将私有对象传递给另一个类?

Mon*_*RPG -1 .net c# private-members .net-4.6.2

我只是注意到我能够通过引用将私有对象传递给另一个类

我猜这不应该是可能的,但它工作正常

这是一个例子

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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Him*_*ere 5

private意味着只是私人为变量,而不是为实际的实例这是由该变量引用.因此,参考 swYandexErrors它是private在你的类当然是另一种不可见的.但是,当您通过引用传递实例时 ,您当然可以访问第一个类中的实例.

为了更清楚以下并没有在课堂上工作csLogger,并导致一个编译器错误,你不容访问swYandexErrorscsLogger:

public static void DoSomething()
{
    ClassA.swYandexErrors.Read();
}
Run Code Online (Sandbox Code Playgroud)

ref顺便说一下:你甚至不需要在你的方法中使用-keyword,因为你没有重新分配传递的StreamWriter.您所做的就是在传递的实例上调用成员.