我想创建一个接口(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/