C#泛型委托及约束
泛型委托:
namespace 泛型委托
{
public delegate void Mydelegate<T>(T msg);
class Program
{ static void Main(string[] args)
{
//Mydelegate<int> myDelgate = M1;
//M1(5);
Mydelegate<string> mydelgate = M4;
M4("abcd");
Console.ReadKey(); }
#region 泛型委托
public static void M1(int msg)
{
Console.WriteLine(msg);
}
public static void M2(double msg)
{
Console.WriteLine(msg);
}
public static void M3(float msg)
{
Console.WriteLine(msg);
}
public static void M4(string msg)
{
Console.WriteLine(msg);
}
public static void M5(Person msg)
{
Console.WriteLine(msg);
}
#endregion
}
class Person { }; }
class Program
{ static void Main(string[] args)
{ List<int> list = new List<int>() { , , , , , , , };
List<int> listresult = list.FindAll(n => n > );
for (int i = ; i < listresult.Count; i++)
{
Console.WriteLine(listresult[i]);
}
Console.ReadKey();
} }
系统内置的泛型委托
class Program
{ static void Main(string[] args)
{ #region 系统内置的泛型委托
//action委托无返回值
Action<int, int> md = (int n1, int n2) => { Console.WriteLine(n1 + n2); };
md(,);
Console.ReadKey(); //当需要存储带返回值的方法的时候,就需要使用另外一个泛型委托Func
Func<string> md1 = () => System.DateTime.Now.ToShortDateString();
Console.WriteLine(md1());
Console.ReadKey();
#endregion } }
泛型约束
#region 泛型约束
//表示使用泛型约束,约束了T只能是值类型
class MyClass<T> where T : struct
{ }
//表示引用类型使用泛型约束,约束了T只能是引用类型
class MyClass2<T> where T : class
{ }
//限制了T必须是实现了某个接口的类型,要求T必须是实现了IComparable接口的类型或者是子类型
class MyClass3<T> where T : IComparable
{ }
//要求T必须是Person类型,或者是Person类的子类型
class MyClass4<T> where T : Person
{ }
//要求T必须是Person类型,或者是Person类的子类型,而且T必须具有一个无参的构造函数
class MyClass5<T>
where T : Person
where T : new()
{ }
//要求V必须是T类型或者T的子类型
class MyClass6<T, V> where V : T
{ } class Person { };
#endregion
C#泛型委托及约束的更多相关文章
- 编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]
前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托 ...
- [转] C# 泛型类型参数的约束
啊.紫原文C# 泛型类型参数的约束 在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制.如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误.这些限制 ...
- C# 《编写高质量代码改善建议》整理&笔记 --(三)泛型&委托&事件
1.泛型 基于泛型,我们可以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型, 确保类型安全. 1)总是优先考虑泛型 优点:可重用性,类型安全,高效率. 2)避免在泛型 ...
- 第十节:委托和事件(2)(泛型委托、Func和Action、事件及与委托的比较)
一. 泛型委托 所谓的泛型委托,即自定义委托的参数可以用泛型约束,同时内置委托Func和Action本身就是泛型委托. 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下. p ...
- C#编程(三十)----------泛型结构,泛型方法,泛型委托
泛型结构 泛型结构和泛型类几乎是一直的,只是泛型结构没有继承的特性..NET平台提供的一个泛型结构是(可空类型)Nullablle<T>.可空类型的引入,主要是为了解决数据库语言中的数字与 ...
- C# 泛型类型参数的约束
在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制.如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误.这些限制称为约束.约束是使用 where 上 ...
- C#规范整理·泛型委托事件
基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是 ...
- 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五 ...
- Predicate<T>与Func<T, bool>泛型委托
引用别人的: static void Main(string[] args) { List<string> l = new List<string>(); l.Add(&quo ...
随机推荐
- 自己动手写spring容器(1)
毕业刚刚一年多一点,毕业了后也顺利的进入了一家著名的互联网公司,做的是后台系统,用的呢也是SSI(struts2,spring)框架,平时做做项目,也已足够了,但是感觉越来越没动力了,越来越没有激情了 ...
- js 获取页面内链接
今天有同学问如何用 JS 正则表达式获取一段文本中的超链接,并对超链接进行处理,想了几分钟,写了下面的代码: var re = /https?:\/\/[\w\.:~\-\d\/]+(?:\?[\w\ ...
- TOGAF架构内容框架之概述及架构工作产品分类
TOGAF架构内容框架之概述及架构工作产品分类 在TOGAF 9之前的版本中,TOGAF的重点主要集中在企业架构开发方法方面,用于指导其使用者如何在各自的组织中对企业架构进行创建和维护,而对于企业架构 ...
- hdu 1213 How Many Tables(并查集练习)
题目链接:hdu1213 赤裸裸的并查集.....水题一个.... #include<stdio.h> #include<string.h> #include<algor ...
- 《Head First Python》学习笔记 01
Python 3提供了70多个内建函数,这是Python“功能齐全”的观点:Python已经包含足够多的内置功能,使你能完成大多数工作,而不必依赖第三方代码. Python 列表: Python列表是 ...
- C语言序列点浅析
摘要: 现行国内的C语言教材普遍不介绍序列点,这使得读者只能“死记硬背”有序列点表达式的求值顺序,不仅造成了读者对C语言知识的认知残缺不全,而且也影响了读者学习的积极性.本文总结了序列点的作用,即表达 ...
- 【实用技巧】去除BootStrap所有圆角效果
满屏的圆角有没有审"美"疲劳啊?教你一键去除所有圆角效果: * { -webkit-border-radius: 0 !important; -moz-border-radius: ...
- 哈工大数据库系统 实验:练习并熟练掌握交互式 SQL 语言
实验目的:基于给定的 OrderDB 数据库, 练习并熟练掌握交互式 SQL 语言实验环境:sql sever 2008 附:OrderDB 表结构及表间的关系 /* 1 查询职工工资按高低排序的前2 ...
- [资源]网上常用免费WebServices集合 转载
引用地址:http://www.cocoachina.com/bbs/simple/?t54338_5.html 天气预报Web服务,数据来源于中国气象局 公用事业 http://www.webxml ...
- 传统flv网页视频(flvplayer)--兼容
1.flv网页视频 项目中需要web打开视频,百度搜了好几个插件,本来是打算用H5 vedio,但是客户的浏览器用的比较老,如果用H5标签的话,IE9以下的浏览器是不支持的.所以费劲又去找了其他插件. ...