我正在编写一个接口,我想声明一个返回泛型集合的属性。集合的元素应该实现一个接口。这是可能的,如果是,那么语法是什么。
这不能编译,这是正确的方法吗?
interface IHouse
{
IEnumerable<T> Bedrooms { get; } where T : IRoom
}
由于
答案 0 :(得分:12)
为什么要使用泛型?只是做:
interface IHouse
{
IEnumerable<IRoom> Bedrooms { get; }
}
这是更清洁,因为你已经限制了界面,它的行为几乎完全相同。
答案 1 :(得分:9)
您必须将界面标记为通用:
interface IHouse<T> where T : IRoom
{
IEnumerable<T> Bedrooms { get; }
}
答案 2 :(得分:2)
微软选择添加此限制没有充分理由。引擎盖下的属性只是一对方法,并且已经支持通用方法。
我已经达到了这个限制几次,不得不求助于添加显式的get和set方法:
interface IHouse
{
IEnumerable<T> GetBedrooms<T>() where T : IRoom;
}
答案 3 :(得分:1)
Generic用于类和方法,而不是属性。如果类/接口是通用的,那么您可以使用属性中的类型。我同意里德的解决方案。