向接口属性添加约束

时间:2009-09-11 15:05:19

标签: c# generics interface

我正在编写一个接口,我想声明一个返回泛型集合的属性。集合的元素应该实现一个接口。这是可能的,如果是,那么语法是什么。

这不能编译,这是正确的方法吗?

interface IHouse
{
    IEnumerable<T> Bedrooms { get; } where T : IRoom
}

由于

4 个答案:

答案 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用于类和方法,而不是属性。如果类/接口是通用的,那么您可以使用属性中的类型。我同意里德的解决方案。