背景是在 NHibernate 映射中,因为集合字段在基类中声明并在运行时动态代理。
由于在我的编码过程中有一些代理类需要引用集合字段,但是,由于 NIBerate 使用自己的集合实例重新分配该字段,因此代理会丢失引用。
尝试使用ref“跟踪”参考,但以奇怪的结果失败。
如果有的话,一些专家可以帮助解释 C# ref 关键字和 NIBerate 集合代理的根本原因。
谢谢。
class Program
{
    static void Main(string[] args)
    {
        var v = new D();
    }
}
class A
{
}
class B : A
{
}
class C
{
    public A a = new A();
    public Proxy p;
    public C()
    {
        p = new Proxy(ref a);
        p.Out();
    }
}
class D : C
{
    public D()
    {
        a = new B();
        Console.WriteLine(a.GetType().Name);
        p.Out();
    }
}
class Proxy
{
    public A a;
    public Proxy(ref A a)
    {
        this.a = a;
    }
    public void Out()
    {
        Console.WriteLine(a.GetType().Name);
    }
}
预期输出: 一个 乙 乙 实际输出: 一个 乙 一个