博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Where 约束
阅读量:5278 次
发布时间:2019-06-14

本文共 1391 字,大约阅读时间需要 4 分钟。

C# 语言参考

 

约束

说明

T:struct

类型参数必须是值类型。 可以指定除 以外的任何值类型。 有关更多信息,请参见。

T:class

类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。

T:new()

类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。

T:<基类名>    

类型参数必须是指定的基类或派生自指定的基类。

T:<接口名称>

类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。

T:U

为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。

 

 

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

public class MyGenericClass
where T:IComparable { }

除了接口约束,where 子句还可以包括基类约束,以指出某个类型必须将指定的类作为基类(或者就是该类本身),才能用作该泛型类型的类型参数。此约束必须在该类型参数的所有其他约束之前。

using
 System;  
class
 MyClassy
<
T, U
>
 
where
 T:
class
 
where
 U:
struct
}

 

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

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

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

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

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

 

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

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

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

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

转载于:https://www.cnblogs.com/jeriffe/articles/2080630.html

你可能感兴趣的文章
jQuery之end()和pushStack()
查看>>
Bootstrap--响应式导航条布局
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>