3
NHibernate要求你的實體屬性和方法被標記爲虛擬來完成所有的魔法。雖然我不知道NHibernate的內在,這是可以理解的爲什麼屬性必須是虛擬的(這些將通過代理類讀取/寫入),但... 爲什麼地球上我的實體方法也必須是虛擬的?爲什麼NHibernate要求實體方法是虛擬的?
NHibernate要求你的實體屬性和方法被標記爲虛擬來完成所有的魔法。雖然我不知道NHibernate的內在,這是可以理解的爲什麼屬性必須是虛擬的(這些將通過代理類讀取/寫入),但... 爲什麼地球上我的實體方法也必須是虛擬的?爲什麼NHibernate要求實體方法是虛擬的?
出於同樣的原因。如果你的方法不是虛擬的,那麼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不要求私有方法是虛擬的。
正確。更重要的是,如果我們做**不** **希望***「NHibernate ......盡其所能」*** - 我們可以讓任何財產或方法**非**虛擬 - 然後我們必須改變映射''。所以,無論是代理與虛擬成員 - 或不。 *(不討論什麼更好或適當,只是說:virtual是代理的mut JUST)* –