2015-05-19 36 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)* –

相關問題