c# - 如何在界面中使用界面

标签 c# interface

我想创建一个接口(interface),它可以处理一个接口(interface)的多个其他对象。

我尝试在接口(interface)中使用接口(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 成员。

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

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

最佳答案

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

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

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

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

第二种但不可取的解决方案是使用显式接口(interface)实现:

public SecondObject[] Values { get; set; }

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

关于c# - 如何在界面中使用界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54237696/

相关文章:

c# - 将 DynamicTableEntity 转换为 Json

c# - 注释掉 HTML

c# - 如何创建自定义验证属性?

C# RestSharp - 反序列化非标准 JSON

c# - 从同一类的不同实例设置 protected /私有(private)属性

c++ - 记录接口(interface)

java - Java 中的 LinkedList 是否实现了默认迭代器?

java - 为什么我不能在接口(interface)中声明静态方法?

java - 仅在接口(interface)上检查样式 JavadocType

arrays - 如何通过引用将结构数组作为接口(interface)传递