2015-05-19 33 views
3

NHibernate要求你的实体属性和方法被标记为虚拟来完成所有的魔法。虽然我不知道NHibernate的内在,这是可以理解的为什么属性必须是虚拟的(这些将通过代理类读取/写入),但... 为什么地球上我的实体方法也必须是虚拟的?为什么NHibernate要求实体方法是虚拟的?

回答

4

出于同样的原因。如果你的方法不是虚拟的,那么NHibernate将无法初始化代理。

只是考虑下面的代码:

public class A 
{ 
    private int _a; 
    public virtual int A 
    { 
    get { return _a; } 
    set { _a = value; } 
    } 

    public void DoSomethingWithA() 
    { 
     Console.WriteLine(_a); 
    } 
} 

所以,如果你有A代理对象,当你调用a.DoSomethingWithA();它将访问未初始化_a场。

为了避免出现这种情况,为了能够注入代理初始化代码,NHibernate不要求私有方法是虚拟的。

+0

正确。更重要的是,如果我们做**不** **希望***“NHibernate ......尽其所能”*** - 我们可以让任何财产或方法**非**虚拟 - 然后我们必须改变映射''。所以,无论是代理与虚拟成员 - 或不。 *(不讨论什么更好或适当,只是说:virtual是代理的mut JUST)* –

相关问题