首页 > 编程语言 >关于c#泛类型参数T的约束

关于c#泛类型参数T的约束

时间:2023-03-10 16:35:27浏览次数:45  
标签:示例 c# 约束 参数 类型 where class

c#支持泛式编程,在我们定义泛型类时,可以加入泛类型参数T的约束。为什么需要参数约束呢,官方是这么说的:

如果要检查泛型列表中的某个项以确定它是否有效,或者将它与其他某个项进行比较,则编译器必须在一定程度上保证它需要调用的运算符或方法将受到客户端代码可能指定的任何类型参数的支持。
当实例化类时用于类型参数的类型种类施加限制。如果实现代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。约束是使用 where 上下文关键字指定的。下面列出了六种类型的约束:

T:结构
类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。

示例:public class TestClass<T> where T : int

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

示例:public class TestClass<T> where T : class

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

示例:public class TestClass<T> where T : ITestClass, new()

T:<基类名>
类型参数必须是指定的基类或派生自指定的基类。

示例:public class TestClass<T> where T : ITestClass

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

示例:public class TestClass<T> where T : System.IComparable

T:U
为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。
示例:public class TestClass<T, U,> where T : U{ }


参考msdn地址:msdn.microsoft.com/zh-cn/library/d5x73970.aspx
————————————————
版权声明:本文为CSDN博主「morphyyang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/morphyyang/article/details/28428467

标签:示例,c#,约束,参数,类型,where,class
From: https://www.cnblogs.com/wl-blog/p/17203837.html

相关文章

  • 类型参数的约束(C# 编程指南)
    类型参数的约束(C#编程指南)VisualStudio2005 其他版本 38(共55)对本文的评价是有帮助 - 评价此主题  在定义泛型类时,可以对客户端代码能够在实例......
  • SQLAlchemy
    SQLAlchemy是Python著名的ORM工具包。通过ORM,开发者可以用面向对象的方式来操作数据库,不再需要编写SQL语句。本篇不解释为什么要使用ORM,主要讲解SQLAlchemy的用......
  • CCF 2017-12
    一:试题编号:2017-12-1试题名称:最小差值时间限制:1.0s内存限制:256.0MB问题描述:问题描述 给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。输入格式......
  • 不支持设置运行目录主机thinkphp伪静态使用方法.htaccess
    不支持设置运行目录主机thinkphp伪静态使用方法.htaccess资源宝分享:​​www.httple.net​​<IfModulemod_rewrite.c>RewriteEngineonRewriteBase/RewriteCond%{REQUEST_......
  • 【WebRtc】获取媒体设备信息
    加载设备信息页面加载完设备信息页面Code/***加载当前设备的音视频信息*/initInnerLocalDevice(){letthat=this;//判断是否支......
  • sockutil
    //commsocket.h#ifndef__COMMSOCKET__H#define__COMMSOCKET__H#ifdef__cplusplusextern‘C‘{#endif#defineERR_EXIT(m)do{perror(m);......
  • gnutls_handshake() failed: The TLS connection was non-properly terminated.
    重置代理完美解决gitconfig--global --unsethttps.https://github.com.proxy gitconfig--global --unsethttp.https://github.com.proxy ......
  • C# ASP.NET MVC 配置允许跨域访问
    在web.config文件中的system.webServer节点下增加如下配置<httpProtocol><customHeaders><addname="Access-Control-Allow-Origin"value="*"/>......
  • 使用select 封装 socket api
    common_socket.h#ifndef__COMMSOCKET_H_#define__COMMSOCKET_H_#ifdef__cplusplusextern'C'{#endiftypedefstruct_socket_handle{in......
  • CWinThread Pump Message, crashing
    如果在MFC消息循环中收到非法访问异常试着找找是不是在多线程中哪个线程提前结束了,而线程创建的对象仍然存活,并且触发了 AccessViolation c0000005大消息泵里发现......