如果泛型类型约束还必须在c#中实现接口,那么类类型约束会实现什么?

时间:2014-07-09 22:10:43

标签: c# generics

在编写泛型方法和函数时,我已经看到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;类型约束添加任何东西 - 我不会想象一个结构可以实现一个接口,但我可能是错的?

谢谢

2 个答案:

答案 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

要求类型Tclassclass,它们实现名为IMyInterface的接口。

例如,这是 Int32 结构的声明:

[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Int32 : IComparable, IFormattable, 
                      IConvertible, IComparable<int>, IEquatable<int>

你可以看到here