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

本文关键字:对象 属性 接口 实现 定义 | 更新日期: 2023-09-27 18:33:34

我有一组实现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; }
}

我知道我不能使用通用对象是属性 - 那么还有其他方法可以做到这一点吗?

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

很可能根本不

有泛型:

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