在c#的属性设置中使用virtual和protected关键字?

时间:2013-12-10 06:23:17

标签: c# nhibernate properties domain-driven-design virtual

在我们的项目中,我们使用域驱动设计模式和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关键字。我的问题是这个类中虚拟和受保护关键字的用途是什么?

2 个答案:

答案 0 :(得分:2)

虚拟属性用于延迟加载(here是类似问题的答案),受保护的setter确保除了后代之外,不能在此类之外更改值。

答案 1 :(得分:1)

Nhibernate代理您的类,它需要虚拟,以便能够重载它们。如果我没记错的话,protected是castle dynamicproxy支持的最低访问级别。在过去,nhibernate使用了一个不同的代理生成器,允许你拥有私有的setter