C# - Generic
定义泛型类
创建泛型类,在类定义中包含尖括号语法
class MyGenericClass<T>
{
...
}
T可以是任意标识符,只要遵循通常的C#命名规则即可。泛型类可以在其定义中包含多个类型,用逗号分隔开
class MyGenericClass<T1, T2, T3>
{
...
}
定义了这些类型后,就可以在类定义中像使用其他类型那样使用它们。

如果把构造函数改为 innerT1Object = new T1();编译会出错,因为当前不知道T1是什么,也不能使用它的构造函数,甚至可能没有构造函数。
default关键字
如果像这样赋值innerT1Object = null;编译会出错,因为此时不知道此类型是值类型还是引用类型那么可以用default关键字解决这个问题。
innerT1Object = default(T1) 如果innerT1Object是引用类型,就给它赋予null值,如果它是值类型,就给它赋予相应的默认值。
约束类型
前面用于泛型类的类型称为无绑定类型,因为没有对它们进行任何约束。而通过约束类型,可以限制可用于实例化泛型类的类型。可以把类型限制为继承自某个类型。
在类定义中,可以使用where关键字来实现。
class MyGenericClass<T1, T2>: MyBaseClass, IMyInterface
where T1 : constraint1 where T2 : constraint2
{
...
}
如果new() (类型必须有一个公共的无参构造函数)用作约束,它就必须是为类型指定的最后一个约束。
可以通过base-class约束,把一个类型参数用作另一个类型参数约束。
class MyGenericClass<T1, T2> where T2 : T1
{
...
}
T2必须与类型T1的类型相同,或者继承自T1。这称之为裸类型约束。类型约束不能循环。
C# - Generic的更多相关文章
- C#:泛型(Generic)
前言: 此系列都为个人对C#的回顾,属于个人理解,新司机可参考.求老司机指点.如果有什么问题或不同见解,欢迎大家与我沟通! 目录: 泛型是什么 泛型的好处及用途 如何声明使用泛型 泛型类 泛型方法 ...
- Target runtime com.genuitec.runtime.generic.jee60 is not defined
转载自:http://jingyan.baidu.com/article/d7130635338e3f13fdf47518.html 用eclipse加载别人的工程,报错Target runtime ...
- A library of generic data structures
A library of generic data structures including a list, array, hashtable, deque etc.. https://github. ...
- System.Collections.Generic的各容器类的用法
演示System.Collections.Generic的各容器类的用法. 包括:Dictionary,KeyValuePair,SortedDic tionary,SortedList,HashSe ...
- Runtime Complexity of .NET Generic Collection
Runtime Complexity of .NET Generic Collection I had to implement some data structures for my compu ...
- 泛型(Generic)
本质:限制集合类型 我们在编写泛化类的时候,我们要时刻提醒自己,我们传入的参数T仅仅是一个Object类型,任何具体类型信息我们都是未知的. 小例子: package day02.generic; i ...
- 使用用Generic.xaml加载默认的主题资源
把Resource嵌入到Generic.xaml文件中,并把该文件放到应用程序的Themes主题文件夹下面,这们Generic.xaml文件中的资源就可以被系统识别为默认主题一部分,从而进行使用. 为 ...
- 1.2 基础知识——关于猪皮(GP,Generic Practice)
摘要: 这是<CMMI快乐之旅>系列文章之一.说起猪皮(GP,Generic Practice),真的让人又爱又恨,中文翻译叫通用实践.CMMI标准中每个级别包含几个PA,每个PA又包含几 ...
- Debian 8.2 下安装MySQL5.7.9 Generic Binaries
安装过程参考了Installing MySQL on Unix/Linux Using Generic Binaries 首先检查是否安装libaio shell> apt-cache sear ...
- NHibernate无法将类型“System.Collections.Generic.IList<T>”隐式转换为“System.Collections.Generic.IList<IT>
API有一个需要实现的抽象方法: public IList<IPermission> GetPermissions(); 需要注意的是IList<IPermission>这个泛 ...
随机推荐
- 转:C++ 性能测试支持
转: http://codinginet.com/articles/view/201606-use_gtestx_for_benchmark?simple=1&from=timeline&am ...
- Sherlock and The Beast
Sherlock Holmes suspects his archenemy, Professor Moriarty, is once again plotting something diaboli ...
- 【BZOJ1212】[HNOI2004]L语言 Trie树
[BZOJ1212][HNOI2004]L语言 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构 ...
- Table of Contents - JAXB
Getting Started Hello World Hello World with Namespace xjc - 将 XML Schema 编译成 Java 类 wsimport: 编译 WS ...
- 解决oracle归档日志写满了(ORA-00257)的问题
解决ORA-00257: archiver error. Connect internal only, until freed 此问题属于归档日志满了. 解决办法: SQL> select * ...
- ios开发入门篇(四):UIWebView结合UISearchBar的简单用法
UIWebView是ios开发中比较常用的一个控件.我们可以用它来浏览网页.打开文档等,今天笔者在这里简单介绍下UIWebView和UISearchBar结合起来的用法,做一个简单的类浏览器. 一: ...
- 4月8日学习笔记(js基础)
<script>标签放在<body>和<head> 放在 <head></head> 里的会比放在 <body></bod ...
- java匿名内部类练习
interface Inter { void method(); } class Test { //补足代码.通过匿名内部类. /* static class Inner implements Int ...
- Polyline转Polygon
IGeometry geo = feature.ShapeCopy; IGeometryCollection pPolyline = geo as IGeometryCollection; ISegm ...
- Mysql创建函数时报错
先去查询 show variables like '%func%' ; 这个语句,如果该语句最后输出的值是OFF 那么就用下面的语句去修改就可以:set global log_bin_trust_f ...