通用扩展方法:接口
问题描述:
是否这些2个扩展方法是相同的或者是有一些危险中使用的2通用扩展方法:接口
public static T GetSomthingFromListOf<T>(this List<T> list)where T: IMyInterface
{
//do somthing that returns an item of T
}
对战
public static IMyInterface GetSomthingFromList(this List<IMyInterface> list)
{
//do somthing that returns an item of IMyInterface
}
答
唯一的区别是1在返回类型中,第一个将返回该类型本身并对其进行约束,以便它必须实现IMyInterface
,而第二个将仅返回IMyInterface
实例。
第二个对于当您只想公开接口的成员时很有用;第一个是当你需要返回原始类型,但确保你可以在方法中把它作为IMyInterface
。
答
除了@Clint答案:
1)如果你有List<ConcreteType>
实例 - 只有通用扩展方法将可
2)如果你通过struct
作为参数传递给非通用方法,预计接口 - 拳击将发生
很好解释,没有想到在第二个实现中我只能使用接口成员的事实。而在第一个示例中,我可以使用所有成员,只需要是IMyInterface类型。 所以我需要在我的问题第一个:)。 –
@Clint:如果'T'是一个结构? – apocalypse
@apocalypse我从来不需要一个接口的结构,但如果它是一个结构可能是什么问题? –