在编写泛型方法和函数时,我已经看到Where类型约束写为
public static void MyMethod<T>(params T[] newVals) where T : IMyInterface
以及
public static void MyMethod<T>(params T[] newVals) where T : class, IMyInterface
&#39;班级&#39;类型约束添加任何东西 - 我不会想象一个结构可以实现一个接口,但我可能是错的?
谢谢
答案 0 :(得分:2)
struct
可以实现一个接口,因此具有双重约束是非常合理的,即要求泛型类型T
都是class
并实现指定的接口。 / p>
从Dictionary
:
[Serializable, StructLayout(LayoutKind.Sequential)]
public struct Enumerator :
IEnumerator<KeyValuePair<TKey, TValue>>, IDisposable,
IDictionaryEnumerator, IEnumerator
{
// use Reflector to see the code
}
答案 1 :(得分:1)
结构可以实现接口。所以这个
where T : class, IMyInterface
要求类型T
为class
和class
,它们实现名为IMyInterface
的接口。
例如,这是 Int32 结构的声明:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Int32 : IComparable, IFormattable,
IConvertible, IComparable<int>, IEquatable<int>
你可以看到here。