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

时间:2017-04-05 09:45:10

标签: c# .net 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();
        }
    }

1 个答案:

答案 0 :(得分:5)

private表示仅对变量私有,而不是实际实例由该变量引用。因此,您班级中swYandexErrors的{​​em>参考 private当然对另一个人不可见。但是,当您通过引用传递实例 时,您当然可以访问第一个类中的实例

更明确以下内容在类csLogger中工作并导致编译器错误,因为您无法访问swYandexErrors中的csLogger

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

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