如何在接口中使用接口

时间:2019-01-17 14:07:30

标签: c# interface

我想创建一个可以处理一个接口的多个其他对象的接口。

我尝试使用接口中的接口和新类中的对象。

public interface IObject
{
    double Value { get; set; }
}

public class FirstObject: IObject
{
    double Value { get; set; }
}

public class SecondObject: IObject
{
    string Titel { get; set; }
    double Value { get; set; }
}

public interface ICollection
{
    IObject[] Values { get; set; }
}

public class Collection: ICollection
{
    SecondObject[] Values { get; set; }
}

现在我得到一个错误,我的Collection没有实现IObject[] Values成员。

我认为,当我使用从接口SecondObject实现的对象(IObject)时,Collection应该可以解决这个问题。

我在做什么错,我该如何解决?

1 个答案:

答案 0 :(得分:6)

使用泛型在这里可能会更好:

public interface ICollection<T> where T : IObject
{
    T[] Values { get; set; }
}

public class Collection : ICollection<SecondObject>
{
    public SecondObject[] Values { get; set; }
}

它现在不起作用的原因是签名应该完全匹配。这意味着Values应该是IObject的数组,但不是。使用泛型可以解决此问题,同时保持类型约束。

第二个但不建议的解决方案是使用显式接口实现:

public SecondObject[] Values { get; set; }

IObject[] ICollection.Values
{
    get
    {
        return this.Values;
    }
    set
    {
        this.Values = value?.Cast<SecondObject>().ToArray();
    }
}