我在使用NHibernate和延遲加載時遇到私有setter的問題。比方說,我有一個類,看起來像這樣:改變延遲加載的對象的私有變量
public class User
{
public virtual int Foo {get; private set;}
public virtual IList<User> Friends {get; set;}
public virtual void SetFirstFriendsFoo()
{
// This line works in a unit test but does nothing during a live run with
// a lazy-loaded Friends list
Friends(0).Foo = 1;
}
}
的SetFirstFriendsFoo呼叫完美的作品單元測試中(因爲它應該因爲objects of the same type can access each others private properties)。
但是,當使用惰性加載好友列表進行實時運行時,SetFirstFriendsFoo調用會以靜默方式失敗。我猜這是因爲在運行時,Users(0).Foo對象不再是User類型,而是從User繼承的代理類,因爲Friends列表是延遲加載的。
我的問題是這樣的:不應該生成運行時異常嗎?如果你嘗試訪問另一個類的私有屬性,你會得到編譯時異常,但是當你遇到像這樣的情況時,應用程序就會忽略你並繼續沿着它前進。
注意:如果我將「私人設置」更改爲「受保護的設置」,一切正常。
你的意思是'朋友[0]。 Foo = 1;'而不是'Users(0).Foo = 1;'? – shahkalpesh 2010-04-03 13:33:59
是的。修正了。對困惑感到抱歉。 – 2010-04-03 13:35:59
因爲私人方法不能代理和保護方法可以? – Paco 2010-04-03 13:43:25