类属性定义为实现接口的对象

时间:2013-10-01 20:03:57

标签: c# entity-framework generics interface

我有一组实施IConnectableIEntity的POCO课程。

在其中一个类Connection中,我想要两个定义为实现IConnectable的对象的属性。

    public interface IConnectable
{
 string Name { get; set; }
 string Url { get; set; }
}

我的连接类

    public partial class Connection : IEntity
{
    public int Id { get; set; }
    public T<IConnectable> From { get; set; }
    public T<IConnectable> To { get; set; }
    public ConnectionType Type { get; set; }
    public double Affinity { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
}

我知道我不能使用通用对象属性 - 所以有没有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

最有可能的是根本没有仿制药:

public partial class Connection : IEntity
{
    public int Id { get; set; }
    public IConnectable From { get; set; }
    public IConnectable To { get; set; }
    public ConnectionType Type { get; set; }
    public double Affinity { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
}

如果重要的是Connection的实例返回更多类型的东西,那么你需要使整个类具有通用性:

public partial class Connection<T> : IEntity
    where T : IConnectable 
{
    public int Id { get; set; }
    public T From { get; set; }
    public T To { get; set; }
    public ConnectionType Type { get; set; }
    public double Affinity { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
}

如果您需要为这两个属性设置两种不同的IConnectable类型,则需要使用通用参数:

public partial class Connection<TFrom, TTo> : IEntity
    where TFrom : IConnectable 
    where TTo : IConnectable 
{
    public int Id { get; set; }
    public TFrom From { get; set; }
    public TTo To { get; set; }
    public ConnectionType Type { get; set; }
    public double Affinity { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
}