深入解析C#中的泛型类与泛型接口

2019-12-26 17:32:56于海丽

可将多重接口指定为单个类型上的约束,如下所示:


class Stack<T> where T : System.IComparable<T>, IEnumerable<T>
{
}

一个接口可定义多个类型参数,如下所示:


interface IDictionary<K, V>
{
}

适用于类的继承规则同样适用于接口:


interface IMonth<T> { }

interface IJanuary   : IMonth<int> { } //No error
interface IFebruary<T> : IMonth<int> { } //No error
interface IMarch<T>  : IMonth<T> { }  //No error
//interface IApril<T> : IMonth<T, U> {} //Error

如果泛型接口为逆变的,即仅使用其类型参数作为返回值,则此泛型接口可以从非泛型接口继承。在 .NET Framework 类库中,IEnumerable<T> 从 IEnumerable 继承,因为 IEnumerable<T> 只在 GetEnumerator 的返回值和 Current 属性 getter 中使用 T。
具体类可以实现已关闭的构造接口,如下所示:


interface IBaseInterface<T> { }

class SampleClass : IBaseInterface<string> { }


只要类参数列表提供了接口必需的所有参数,泛型类便可以实现泛型接口或已关闭的构造接口,如下所示:


interface IBaseInterface1<T> { }
interface IBaseInterface2<T, U> { }

class SampleClass1<T> : IBaseInterface1<T> { }     //No error
class SampleClass2<T> : IBaseInterface2<T, string> { } //No error


注:相关教程知识阅读请移步到c#教程频道。