【发布时间】:2010-04-04 02:27:35
【问题描述】:
我在使用 NHibernate 和延迟加载时遇到了私有设置器的问题。假设我有一个如下所示的类:
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 列表是延迟加载的。
我的问题是:这不应该产生运行时异常吗?如果您尝试访问另一个类的私有属性,则会出现编译时异常,但是当您遇到这样的情况时,应用程序似乎会忽略您并继续前进。
注意:如果我将“私有集”更改为“受保护集”,一切正常。
【问题讨论】:
-
你的意思是
Friends[0].Foo = 1;而不是Users(0).Foo = 1;? -
是的。解决了这个问题。很抱歉造成混乱。
-
因为私有方法不能被代理,而受保护的方法可以?
标签: c# nhibernate accessibility