where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量。
    1.接口约束。
         例如,可以声明一个泛型类 MyGenericClass,这样,类型参数 T 就可以实现 IComparable< T> 接口:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->public class MyGenericClass<Twhere T:IComparable { }

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->class MyClassy<T, U>
       where T : class
       where U : struct
{
}

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->public class MyGenericClass <Twhere T: IComparable, new()
{
        // The following line is not possible without new() constraint:
        T item = new T();
}

new() 约束出现在 where 子句的最后。

4.对于多个类型参数,每个类型参数都使用一个 where 子句,
   例如:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->interface MyI { }
class Dictionary<TKey,TVal>
where TKey: IComparable, IEnumerable
where TVal: MyI
{
        public void Add(TKey key, TVal val)
        {
        }
}

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->public bool MyMethod<T>(T twhere T : IMyInterface { }

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->delegate T MyDelegate<T>() where T : new()

where 子句用于指定类型约束相关推荐

  1. Go 学习笔记(47)— Go 标准库之 strconv(string/int 互相转换、Parse 字符串转换为指定类型、Format 指定类型格式化为字符串)

    参考: http://c.biancheng.net/view/5112.html 在实际开发中我们往往需要对一些常用的数据类型进行转换,如 string . int . int64 . float ...

  2. C++/C++11中用于定义类型别名的两种方法:typedef和using

    类型别名(type alias)是一个名字,它是某种类型的同义词.使用类型别名有很多好处,它让复杂的类型名字变得简单明了.易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的.在C++中,任何 ...

  3. php约束型,PHP类型约束用法示例

    本文实例讲述了PHP类型约束用法.分享给大家供大家参考,具体如下: 在强类型语言中,类型约束是语法上的要求,即定义一个变量的时候,必须指定类型,并以后也只能存储该类型数据: php是弱类型,其特点是无 ...

  4. 函数没有“as”子句;假定返回类型为 object。_TypeScript笔记(一)类型amp;接口...

    数据类型 TS是强类型的JS,TS会被编译成JS在浏览器环境下运行,在遇到类型错误时,TS会在编译时类型检查并报错,在上传到服务器之前报错,这就意味着用户不会感知到TS的类型错误,而JS在执行时报错, ...

  5. 用Linux命令行实现删除和复制指定类型的文件

    (一)Linux 删除当前目录及子目录中所有某种类型的文件 方法1 : 此方法不能处理目录中带空格的那些. rm -rf `find . -name "*.example"` Li ...

  6. linux 复制指定类型,用Linux命令行实现删除和复制指定类型的文件

    (一)Linux 删除当前目录及子目录中所有某种类型的文件 方法1 : 此方法不能处理目录中带空格的那些. rm -rf `find . -name "*.example"` Li ...

  7. java中小数后加f_在 Java 中,小数默认为 ,如果要指定 类型请在小数后加 F/f 。_学小易找答案...

    [填空题]Java 语言采用双字节的 编码. [单选题]马斯洛需要层次论所提出的5种需要:生理需要.安全需要.归属需要.( ).自我实现需要 [填空题]String s= " abc &qu ...

  8. typescript 类型约束(:普通约束、接口约束、type约束)

    当类型被约束后,就拥有了约束类型的所有静态方法1.普通类型约束let a:string=xx2.指定类型和属性(1)指定对象let a:{属性1:string,属性2:string}=x 必须是一个对 ...

  9. 【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 )

    文章目录 一.Dart 泛型类与泛型方法 二.Dart 泛型中的特定类型约束 三.Dart 自带泛型 四.完整代码示例 五. 相关资源 一.Dart 泛型类与泛型方法 泛型作用 : 为 类 , 接口 ...

最新文章

  1. 树莓派安装python2idle_树莓派开发日记2——Linux!python!GPIO!
  2. UI+Class Object
  3. LeetCode Factorial Trailing Zeroes(计算阶乘结果尾部有几个0)
  4. Redis的zset有多牛?请把耳朵递过来
  5. 曾经很火但消失了的软件,你还记得几个?
  6. gulp不生成打包文件_命令行输入gulp 无法生成压缩文件
  7. mysql error innodb_MySQL无法启动: InnoDB Error:unable to create temporary file
  8. Spring Cloud学习总结(1)——Spring Cloud及微服务入门
  9. What's New in C# 6.0(转)
  10. C语言员工信息管理系统
  11. python数据标注工具_数据标注工具大全汇总,有了这些工具再也不用自己开发了...
  12. 7.1立体环绕追踪音效|专属个性调音台,这副头戴电竞耳机有点料
  13. spring三级缓存
  14. 数字图像处理——LoG算子
  15. 符合功能安全要求的动态测试工具-TESSY
  16. 信息论相对熵的凸性证明
  17. 最新资料!工银亚洲开户见证业务受理网点(广东地区,除了深圳)
  18. 社会化统计工具分享之Google分析、cnzz、51la、百度统计和Js比较
  19. Oracle Data Integrator(ODI)架构
  20. android删除本地图片,Android中结合contentResolver.delete和file.delete实现本地图片的删除...

热门文章

  1. OpenJudge NOI 1.5 02:财务管理
  2. Seq(HDU-6672)
  3. 数三角形(51Nod-2497)
  4. 暑期训练日志----2018.8.14
  5. 信息学奥赛一本通C++语言——1031:反向输出一个三位数
  6. 4.4.5 清除变量内容
  7. Centos系列 Curl error (37): Couldn‘t read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-XXXX
  8. android可以定义函数吗,Android自定义view 你所需要知道的基本函数总结
  9. assets bitmap 转_图片文件和Bitmap之间的转换
  10. python array函数_Python bytearray() 函数