接口和约束

时间:2010-10-14 08:55:29

标签: c# interface

考虑到以下设置,如何限制IConnection仅包含IPortConnectionType的{​​{1}}?也许我忽略了一些显而易见的事情:

Ports

4 个答案:

答案 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; }
}

应将这些属性的管理留给实施。