我ControlA
接受IInterfaceB
,其属性类型属性
List<unknownType>
如果发生ControlA
,我需要在unknownType
...
IInterfaceB
的新实例
unknownType
需要特定的属性,所以我立刻认为它可能是一个接口,但很快就意识到接口无法实例化......
你会如何设计这个系统?
编辑当前的继承链如下所示:
topLevelClass -> baseObject -> IBaseObject (which is implemented in topLevelClass)
所以,如果我在链中添加了一个新类,则需要进行继承和实现,这是不可能的(afaik)
答案 0 :(得分: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 });
}
}
答案 1 :(得分:0)
对类型的限制是否有效?
List<T> where T : IInterface
答案 2 :(得分:0)
您的规范不够具体,无法很好地回答,但请尝试对T进行约束。
public interface IInterfaceB<T>
where T : new()
{
List<T> Whatever { get; }
}
这允许您这样做:
T iDoNotCare = new T();
答案 3 :(得分:0)
为什么List必须是unknowntype?为什么它不能成为一个真正的类,具有构造函数所需的真实属性供您实例化?如果需要扩展该类,则可以继承该类。根据你提供的信息,如果你需要的只是进入这个List的类中的一些属性,那么一个好的老类应该可以做到。