首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSLA、BusinessCollectionBase和ITypedList

CSLA、BusinessCollectionBase和ITypedList
EN

Stack Overflow用户
提问于 2011-03-31 22:11:15
回答 1查看 381关注 0票数 0

我正在为一个使用基于.NET2.0CSLA之前版本的业务对象的客户端开发一个大型Winforms项目。升级到较新版本的CSLA不是一个选项。我的客户使用CodeSmith从数据库表生成“基本”CSLA样式的业务对象。所有的业务对象都有一个对应的“列表”类。

我遇到的一个问题是绑定到Winforms控件,因为生成的List类没有实现ITypedList。客户告诉我,我可以扩展List类并自己实现它(他们提供了下面的代码片段),但我正在处理相当多的业务对象,每次我扩展其中一个List类来实现ITypedList时,都违反了DRY。我在每个扩展的List类中都使用了以下代码:

代码语言:javascript
复制
public class SomeItemListExtended : SomeItemListBase, ITypedList
{
    public string GetListName(PropertyDescriptor[] listAccessors)
    {
        return null;
    }

    public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors)
    {
        return TypeDescriptor.GetProperties(CreateContent().GetType());
    }
}

CreateContent只返回item的一个新实例,List是它的集合:

代码语言:javascript
复制
public BusinessBase CreateContent()
{
    return new SomeItem();
}

我一直在试图弄清楚是否有一种方法可以使用继承来避免在每个List类扩展中重复相同的代码,但还没有弄清楚如何在没有多重继承的情况下做到这一点,我们都知道这无论如何都是不可能的。如果我创建了一个实现ITypedListListExtensionBase类,那么我的扩展类就不能同时从ListExtensionBase和上面例子中的SomeItemListBase继承。如果我创建一个带有泛型参数的基类,我将失去对所有基类成员的直接访问。我无法控制SomeItemListBase是如何生成的,并被指示按原样使用他们的业务对象框架。有没有办法在每个列表扩展中使用相同的代码来实现ITypedList?我是否应该为每个实现使用相同的代码,或者每个扩展的ITypedList实现是否应该不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-06 16:40:05

如果不能修改基类,我认为您只能在每个list类上分别实现ITypedList

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5501252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档