繁体   English   中英

ASP.NET中的继承和缓存

[英]Inheritance and caching in ASP.NET

我有一些类层次结构-名为“ Group”的基类,其中包含有关单个组的基本信息,以及名为“ RootGroup”的类,该类继承自“ Group”,并使用某些属性扩展了基类。 组列表使用基类存储在高速缓存中:例如IEnumerable(其中一些是普通组,一些是根组。关键是从缓存中检索集合并将其强制转换回IEnumerable类型,具体RootGrop项目的信息丢失了,除了记住每个缓存项目的类型之外,是否有其他方法可以防止这种情况发生?

吉米

如果我正确理解您的问题,那么您的RootGroup属性不会“丢失”。 问题是您具有RootGroup对象的Group视图。 为了访问RootGroup属性,必须将对象RootGroup转换为RootGroup

一个简单的检查:

 if(groupItem is RootGroup)
 {
       RootGroup rootGroupItem = groupItem as RootGroup;
       // Do stuff
 } 

您可以在检索每个项目时对其进行检查,并将其转换为正确的类型:

foreach (object item in list) {
  if (item is RootGroup) {
    Rootgroup rootGroup = item as RootGroup;
    // do stuff  with rootGroup 
  }
}

如果您使用的是通用集合,如List<Group> ,则可以这样更改foreach:

foreach (Group item in list)...

其他方式...

//from cache
IEnumerable<Group> groupsFromCache = GetGroupsFromCache();
IEnumerable<RootGroup> rootGroups = groupsFromCache.OfType<RootGroup>();

参见http://www.thinqlinq.com/default/Using-Cast-Or-OfType-Methods.aspx

这具有与延迟执行相关的各种优点,但是如果没有更多细节,我无法真正分辨出是否有区别。 就像提到的其他帖子一样,与子类相关的信息也不会丢失,您只需将其放在可访问的形式即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM