考虑到以下设置,如何限制IConnection
仅包含IPort
中ConnectionType
的{{1}}?也许我忽略了一些显而易见的事情:
Ports
答案 0 :(得分:3)
您无法在编译时强制执行此类约束。
您必须在运行时进行一些检查。
答案 1 :(得分:2)
为了控制IPorts
的类型,您需要将类更改为不以可写方式公开列表。
将属性设置为只读,返回新的ReadOnlyCollection
以防止向内部集合添加任何类型的IPort
。添加AddPort
方法,只允许添加正确类型的IPort
。
答案 2 :(得分:2)
如何整理枚举和使用泛型?
public interface IConnectionType
{
ConnectionTypeEnum Connection{ get; set;}
}
public enum ConnectionTypeEnum
{
Undefined,
Type1,
Type2
}
public interface IPort<T> where T : IConnectionType
{
}
public interface IConnection<T> where T : IConnectionType
{
IEnumerable<IPort<T>> Ports {get;set;}
}
我不确定是否已经有任何意义,但是
答案 3 :(得分:0)
不是在IPort接口中使用连接类型,而是具有IConnection属性,例如
IConnection
{
ConnectionType ConnectionType { get; }
IEnumerable<IPort> Ports { get; }
}
IPort
{
IConnection Connection { get; }
}
应将这些属性的管理留给实施。