C# 为什么所有的Glass.Mapper字段都应该是虚拟的?

C# 为什么所有的Glass.Mapper字段都应该是虚拟的?,c#,sitecore,glass-mapper,C#,Sitecore,Glass Mapper,委员会: 但是,您可以看到该类不包含任何特殊标记 使用Glass.Mapper编写类时要记住一件重要的事情 是为了确保所有字段都标记为虚拟。玻璃制图器 可以通过使用 按需映射和自动映射的组合 它回避使用“按需”和“自动映射”,但没有解释如何或为什么 有人知道为什么将这些字段标记为virtual很重要吗?没有这个,它似乎工作得很好。我看不到任何东西会继承字段并覆盖它们?如果使用延迟加载,Glass mapper需要能够动态生成一个封装类的代理类。为了能够继承和覆盖您的属性,需要将它们标记为virt

委员会:

但是,您可以看到该类不包含任何特殊标记 使用Glass.Mapper编写类时要记住一件重要的事情 是为了确保所有字段都标记为虚拟。玻璃制图器 可以通过使用 按需映射和自动映射的组合

它回避使用“按需”和“自动映射”,但没有解释如何或为什么


有人知道为什么将这些字段标记为
virtual
很重要吗?没有这个,它似乎工作得很好。我看不到任何东西会继承字段并覆盖它们?

如果使用延迟加载,Glass mapper需要能够动态生成一个封装类的代理类。为了能够继承和覆盖您的属性,需要将它们标记为
virtual

这些是属性,而不是字段。我将其保留为字段,因为sitecore(错误地)将其称为sitecore,但sitecore(据我所知)不支持延迟加载?这是Umbraco的事情吗?Glass在Sitecore实现中为您执行延迟加载。至少在Sitecore中尽可能多。我相信属性也需要是虚拟的才能使用
using Glass.Mapper.Sc.Configuration.Attributes;

namespace Glass.Mapper.Sites.Sc.Models.Landing
{
    public class HomePage
    {
        public virtual string Title { get; set; }
        public virtual string MainBody { get; set; }
    }
}