背景是在 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);
}
}
预期输出: 一个 乙 乙 实际输出: 一个 乙 一个