加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:28:26 所属栏目:百科 来源:网络整理
导读:我想创建一个可以处理一个接口的多个其他对象的接口. 我尝试在界面中使用界面并在新类中使用对象. public interface IObject{ double Value { get; set; }}public class FirstObject: IObject{ double Value { get; set; }}public class SecondObject: IObje
我想创建一个可以处理一个接口的多个其他对象的接口.

我尝试在界面中使用界面并在新类中使用对象.

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应该处理这个.

我做错了什么,怎么解决这个问题?

解决方法

使用泛型可能会更好一些:

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

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

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

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

public SecondObject[] Values { get; set; }

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读