2009-01-22 103 views
0

我有ControlA,它接受一个IInterfaceB其中有型 List<unknownType>你会如何处理这个设计?

的财产在ControlA我需要的unknownType新实例添加到IInterfaceB列表中的事件......

unknownType需要具体属性,所以我马上认为它可能是一个接口,但很快意识到接口不能实例化...

你会如何设计这个系统?

编辑当前继承链看起来是这样的:

topLevelClass -> baseObject -> IBaseObject (which is implemented in topLevelClass) 

所以,如果我增加了一个新的类连锁那就需要做的继承和实施这将是不可能的(据我所知)

回答

1

如果我正确解释这一点,您可以在unknownType上添加一个约束,以包含您所需的属性:

class ControlA 
{ 
    void Frob<T>(IInterfaceB<T> something) where T : IHasSomeProperties, new() 
    { 
     something.ListOfT.Add(new T() { SomeProperty = 5 }); 
     something.ListOfT.Add(new T() { SomeProperty = 14 }); 
    } 
} 
0

对类型的工作有限制吗?

List<T> where T : IInterface 
0

你的规范是不够具体回答很好,但尝试把制约T.

public interface IInterfaceB<T> 
    where T : new() 
{ 
    List<T> Whatever { get; } 
} 

这可以让你做到这一点:

T iDoNotCare = new T(); 
0

为什么列表必须是未知类型?为什么它不能成为一个真正的类,它有你需要的一个构造函数实例化的真实属性?如果你需要扩展这个类,你可以继承它。根据你提供的信息,如果你所需要的仅仅是班级中的一些属性,那么一个好的老班就应该这样做。