代码之家  ›  专栏  ›  技术社区  ›  Adam Naylor

您将如何处理此设计?

  •  0
  • Adam Naylor  · 技术社区  · 17 年前

    我有 ControlA 它接受 IInterfaceB 它具有类型为的属性 List<unknownType>

    控制 我需要添加一个新的 unknownType 到列表中 ...

    未知数

    你将如何设计这个系统?

    编辑

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

    因此,如果我向链中添加了一个新类,它将需要进行继承和实现,这是不可能的(afaik)

    4 回复  |  直到 17 年前
        1
  •  1
  •   mqp    17 年前

    如果我的解释正确,您可以在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 });
        }
    }
    
        2
  •  0
  •   Adam Ralph    17 年前

    List<T> where T : IInterface
    
        3
  •  0
  •   Michael Meadows    17 年前

    您的规范不够具体,无法很好地回答问题,但请尝试对t设置约束。

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

    这允许您执行以下操作:

    T iDoNotCare = new T();
    
        4
  •  0
  •   BFree    17 年前