泛型介绍(接上一篇,具体的事例随后呈上)

2.2接口约束
为了规定某个数据类型必须实现某个接口,需要声明一个接口约束(interface constraint).有了这种约束之后,甚至不需要执行类型转换,就可以调用一个显示的接口成员实现.
为了确保T类型参数都是先了IComparable接口,
public class Binary<T> where T:System.IComparable{...}
编译器会确保每次使用Binary类的时候,都必须指定一个实现了IComparable接口的类型参数.

 

 

2.3 struct/class 约束

另一个重要的泛型约束是将类型参数限制为一个值类型或者一个引用类型.编译器不允许在一个约束中将System.ValueType指定成基类.相反,C#提供了特殊的语法,这种语法同时适用于引用类型.在这种语法中,不是为T指定一个基类.相反,只需要指定关键字struct或者class.

例:

Public struct Nullable<T>:IFormattable,IComparable,IComparable<Nullable<T>>,INullable where T:struct

{//.......}

2.4多个约束
对于任何给定的类型参数,都可以指定任意数量的接口作为约束,但基类约束只能指定一个,因为一个类可以实现任意数量的接口,但肯定只能从一个类继承.每个新约束都在一个以逗号分隔的列表中声明,约束列表跟在泛型类型名称和一个冒号之后.如果有多个类型参数,那么每个类型名称的前面都要使用一个where关键字.如下事例,EntityDictionary类包含两个类型参数:Tkey和TValue.TKey类型参数有两个接口约束,而TValue类型参数有一个基类约束.例:

Public class EntityDictionary<TKey,TValue>:

System.Collections.Generic.Dictionary<TKey,TValue>

Where TKey:IComparable,IFormattable

Where TValue:EntityBase

1.泛型方法
为了定义泛型方法,需要紧接在方法名之后添加类型参数语法,如
public T method<T>(T params)
{
return params;
}
泛型方法也允许指定约束:
public T method<T>(T params)
where T:IComparable
{
return params;
}

2.Default关键字:
要确定用于创建泛型类实例的类型,需要了解一个最基本的情况:他们是引用类型还是值类型.若不知道这个情况,就不能用下面的代码赋予null值:
public class myGenericClass<T1,T2,T3>
{
T1 t1;
public myGenericClass()
{
t1=null;
}
}
如果T1是值类型,则t1不能是null,所以这段代码将不会编译.幸好,我们可以用default关键字的新用法解决了它.
public myGenericClass()
{
t1=default(T1);
}
其结果是:如果t1是引用类型,就给它赋予null,如果它是值类型,就赋予默认值.如数字类型,这个默认值就是0.

几个泛型类型的示例:
2.5.1定义泛型结构
public struct myStruct<T1,T2>
{
public T1 item1;
public T2 item2;}
2.5.2 定义泛型接口
interface myInterfacee<T>{}
2.5.3.定义泛型方法
public T GetDefault<T>()
{return default(T);}
2.5.4定义泛型委托
public delegate T1 myDelegate<T1,T2>(T2 op1,T2 op2) where T1:T2

时间: 2024-10-28 05:15:38

泛型介绍(接上一篇,具体的事例随后呈上)的相关文章

MaxCompute(原ODPS)开发入门指南——数据上云篇

MaxCompute(原ODPS)开发入门指南--数据上云篇 写在最前面 >>>进入了解更多>>>阿里云数加·MaxCompute大数据计算服务. 根据<MaxCompute(原ODPS)开发入门指南--计量计费篇>的了解,大家清楚了MaxCompute可以做什么,计费模式如何,想必大家也开通了MaxCompute想进行一次POC,但是大家遇到第一个问题一定是我的数据如何上云? 可通过多种方式数据流入MaxCompute MaxCompute(原ODPS)提

Wordpress上一篇下一篇程序代码

很多WordPress给文章加上一篇下一篇这个功能,代码如下写法  代码如下 复制代码 <?php previous_post_link('%link'); ?> <?php next_post_link('%link'); ?> 上在的用法最此函数的最简单的用法,此函数还有更多更好的参数与用处,比喻说同分类下的下一篇文章.不显示文章标题而只是提取链接,自定义瞄点文字  代码如下 复制代码 <?php previous_post_link($format, $link, $i

ASP实现上一篇,下一篇过程代码

ASP实现上一篇,下一篇过程代码 Rem==上一篇== Rem====================================================== Rem= 参数说明: Rem= pid当前ID,prame:栏目前辍(如一般web_news表,字段时一般为wn_**,prame就代表wn) Rem= ptable(表前辍.如一般表名是:站点名_表名(shenzhe_news) ptable:就代表shenzhe) Rem= 说明:采用上面命名法,可使该过程达到通用 Rem

上一篇,下一篇过程代码

过程 Rem==上一篇==Rem================================================================Rem= 参数说明:Rem= pid当前ID,prame:栏目前辍(如一般web_news表,字段时一般为wn_**,prame就代表wn)Rem= ptable(表前辍.如一般表名是:站点名_表名(shenzhe_news) ptable:就代表shenzhe)Rem= 说明:采用上面命名法,可使该过程达到通用Rem==========

phpcms2008:phpcms2008添加上一篇下一篇的功能

第一步:修改show.php在代码if(!$C['defaultchargepoint'] && !$r['readpoint'])前面增加代码//<FKE.LA添加代码>//上一篇文章$more_pre = $db->get_one("SELECT title,url FROM `".DB_PRE."content` WHERE `contentid`<$contentid and `catid`='{$r['catid']}' or

Visual C#泛型学习之泛型介绍

visual 什么是泛型 一种类型占位符,或称之为类型参数.我们知道在一个方法中,一个变量的值可以作为参数,但其实这个变量的类型本身也可以作为参数.泛型允许我们在调用的时候再指定这个类型参数是什么.在.net中,泛型能够给我们带来的两个明显好处是--类型安全和减少装箱.拆箱. 类型安全和装箱.拆箱 作为一种类型参数,泛型很容易给我们带来类型安全.而在以前,在.net1.1中我们要实现类型安全可以这样做 : //假设你有一个人员集合 public class Person{ private str

网页中“上一篇”“下一篇”设计思考

网页制作Webjx文章简介:网页中的"上一篇"和"下一篇"链接问题. 一篇博客文章页中,正文的下面总会有两个操作"上一篇"和"下一篇".每次看到这两个链接,我都要思量半天,"上一篇"究竟指的是新的一篇还是旧的一篇. 问了两个同事,给了我两个不同的解释: 高峰: "上一篇"肯定是旧的一篇,因为上一篇是先发的,所以是旧的,下一篇是后发的,所以是新的 丹丹:"上一篇"是新的

phpcms手机内容页面添加上一篇和下一篇

  本文给大家分享的是在phpcms中的手机内容详情页里添加上一篇和下一篇的方法,十分的简单实用,有需要的小伙伴可以参考下. 在phpcmsmoduleswapindex.php里面,搜索下面这句 代码如下: if(!$r || $r['status'] != 99) showmessage(L('info_does_not_exists'),'blank'); 找到后,在它的下一行添加上 代码如下: //上一页 $previous_page = $this->db->get_one(&quo

PHP实现上一篇下一篇的方法实例总结_php技巧

本文实例分析了PHP实现上一篇下一篇的方法.分享给大家供大家参考,具体如下: php实现上一篇下一篇这个主要是通过sql来根据当前的id来进行判断然后筛选出当前ID之前的数据或ID之后的数据了就这么简单,具体的我们来看看. 实现网站文章里面上一篇和下一篇的sql语句的写法. 当前文章的id为 $article_id,当前文章对应分类的id是$cat_id,那么上一篇就应该是: 复制代码 代码如下: SELECT max(article_id) FROM article WHERE article