C#泛型约束的深入理解

 更新时间:2013年05月31日 11:32:16   作者:  
本篇文章是对C#中的泛型约束进行了详细的分析介绍,需要的朋友参考下
where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量。
1.接口约束。
例如,可以声明一个泛型类 MyGenericClass,这样,类型参数 T 就可以实现 IComparable<T> 接口:
复制代码 代码如下:

public class MyGenericClass<T> where T:IComparable { }

2.基类约束:指出某个类型必须将指定的类作为基类(或者就是该类本身),才能用作该泛型类型的类型参数。
这样的约束一经使用,就必须出现在该类型参数的所有其他约束之前。
复制代码 代码如下:

class MyClassy<T, U>
where T : class
where U : struct
{
}

3.where 子句还可以包括构造函数约束。
可以使用 new 运算符创建类型参数的实例;但类型参数为此必须受构造函数约束 new() 的约束。new() 约束可以让编译器知道:提供的任何类型参数都必须具有可访问的无参数(或默认)构造函数。例如:
复制代码 代码如下:

public class MyGenericClass <T> where T: IComparable, new()
{
// The following line is not possible without new() constraint:
         T item = new T();
}

new() 约束出现在 where 子句的最后。
4.对于多个类型参数,每个类型参数都使用一个 where 子句
例如:
复制代码 代码如下:

interface MyI { }
class Dictionary<TKey,TVal>
where TKey: IComparable, IEnumerable
where TVal: MyI
{
public void Add(TKey key, TVal val)
{
}
}

5.还可以将约束附加到泛型方法的类型参数,例如:
复制代码 代码如下:

public bool MyMethod<T>(T t) where T : IMyInterface { }

请注意,对于委托和方法两者来说,描述类型参数约束的语法是一样的:
复制代码 代码如下:

delegate T MyDelegate<T>() where T : new()

相关文章

  • C#开发之int与string转化操作

    C#开发之int与string转化操作

    这篇文章主要介绍了C#开发之int与string转化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • c#并行任务多种优化方案分享(异步委托)

    c#并行任务多种优化方案分享(异步委托)

    c#并行任务多种优化方案分享,使用异步委托+回调函数方式实现,大家参考使用吧
    2013-12-12
  • C#实现GridView导出Excel实例代码

    C#实现GridView导出Excel实例代码

    本篇文章主要介绍了C#实现GridView导出Excel实例代码,这里整理了详细的代码,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • C#实现餐饮管理系统完整版

    C#实现餐饮管理系统完整版

    这篇文章主要为大家详细介绍了C#实现餐饮管理系统的完整版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • c# 通过WinAPI播放PCM声音

    c# 通过WinAPI播放PCM声音

    这篇文章主要介绍了c# 通过WinAPI播放PCM声音的方法,帮助大家更好的理解和使用c#编程语言,感兴趣的朋友可以了解下
    2020-12-12
  • WinForm调用百度地图接口用法示例

    WinForm调用百度地图接口用法示例

    这篇文章主要介绍了WinForm调用百度地图接口用法,结合具体实例形式简单分析了WinForm WebBrower控件与前端百度接口交互的相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • C#实现redis读写的方法

    C#实现redis读写的方法

    这篇文章主要为大家详细介绍了C#实现redis读写的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Unity3D实现播放gif图功能

    Unity3D实现播放gif图功能

    这篇文章主要为大家详细介绍了Unity3D实现播放gif图功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • c# WPF中自定义加载时实现带动画效果的Form和FormItem

    c# WPF中自定义加载时实现带动画效果的Form和FormItem

    这篇文章主要介绍了c# WPF中自定义加载时实现带动画效果的Form和FormItem,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C#实现根据银行卡卡号判断银行名

    C#实现根据银行卡卡号判断银行名

    这篇文章主要介绍了C#实现根据银行卡卡号判断银行名,是从其他网友的java程序改编而来,有需要的小伙伴可以参考下。
    2015-07-07

最新评论