在我们的项目中,我们使用域驱动设计模式和NHibernate映射。我们创建了域类,在那些类中我们创建了这样的属性。
public class Telephone
{
public virtual int Id { get; protected set;}
public virtual string Number { get; protected set;}
public virtual string Remarks { get; set;}
}
此处所有属性都使用virtual关键字进行修饰,而某些属性使用protected关键字。我的问题是这个类中虚拟和受保护关键字的用途是什么?
答案 0 :(得分:2)
虚拟属性用于延迟加载(here是类似问题的答案),受保护的setter确保除了后代之外,不能在此类之外更改值。
答案 1 :(得分:1)
Nhibernate代理您的类,它需要虚拟,以便能够重载它们。如果我没记错的话,protected是castle dynamicproxy支持的最低访问级别。在过去,nhibernate使用了一个不同的代理生成器,允许你拥有私有的setter