- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
详解C#泛型特性及相关实例
详解C#泛型特性及相关实例
在这里我们将讨论的是C#泛型特性及相关实例,希望通过本文如此详细的介绍,能对大家了解泛型有所帮助。
本文将为大家讲述.NET中最常见的一种特性,C#泛型。希望通过本文能帮助大家更好的学习和理解C#泛型,在平时的开发工作中起到事半功倍的效果。
C#泛型问题简介和陈述
详述C#泛型集合相关内容
深度剖析C#泛型的使用
关于C#泛型作用的简单说明
C#泛型支持简单描述
泛型,.NET的这个特性相信大家都已经很熟悉了,提起泛型,不能不首先提到C++中的模板,C++中模板的引入大大提高了代码的重用性,因此也得到了许多程序员的喜爱。因此,在同为强类型语言平台的.NET 2.0和Java 1.5中,它们也都不约而同的引入了泛型的对语言和平台的支持。不过虽然三种语言最终都提供了将类型参数化的功能,然而这个功能在三个平台或语言中的实现却大大不同。相对来说,C++的模板功能是三者中最为强大的,不过由于.Net和Java对类型安全和稳定性要求更高,它们对泛型的支持要稍微简单,不过即使如此,二者对泛型特性的实现也引起了两个阵营中程序员们的争论,不过最终普遍认为Java的伪泛型(擦拭法)要比.NET的JIT级别的真正的泛型性能要差(java仍然有装箱,拆箱操作)。当然这些是后话,下面我们来看看.NET的泛型到底如何使用吧!
基本介绍
.NET 2.0以后以后支持在很多类型上使用泛型,包括类、结构、接口、委托和方法成员,在这些类型上使用泛型和在类上使用是一样的。它甚至支持同一个接口但不同泛型类型的实现,这有点类似重载在类级别的实现。最后.NET允许你同时定义多个泛型类型。
在泛型方法中的泛型类型基本跟在类中使用情况一样,不过泛型方法有一个方便程序员的地方就是它的类型推断功能,这意味着程序员可以即能和使用普通方法一样使用这些方法,同时又能享受泛型带来的方便。e.g.
代码
static?void?TestT,?U(T?t,?U?u)?{?}static?void?main(){ ?
//在函数中我们可以不用声明参数类型,编译器会自动根据实际数据? ?
//自动推断类型 ?
Test(10,?20);Test(1.1,?2.2);}?
下面我们来看看泛型在.NET中使用的一些需要注意的地方。
1. 泛型在嵌套类中的使用。嵌套的子类会自动继承(?)包裹类的泛型类型,当然,你也可以在嵌套类中覆盖掉包裹类的类型,不过编译器会在编译的时候发出警告来提醒用户注意避免误写。e.g.
class?ContainerT,?U{ ?
//编译器会在这里发出警告 ?
//告诉用户这里的泛型和包裹类相同 ?
class?NestedU{?void?Method(T?p0,?U?p1)?{?}}}?
2. 协变和逆变的问题。关于协变和逆变的定义简单来说就是泛型类型是否允许子类和父类之间转换,这里不做详细讨论,读者如果有兴趣可以参考这篇文章。在.net 4.0以前是不支持协变和逆变的,这也让我们的代码有些时候实现起来很别扭。下面可以看个简单的例子(注:这个例子仅作说明用,不一定恰当)。
首先我们定义两个数据类型,IData和IOperation:
interface?IData{void?method();} ?
interface?IOperationT? ?
where?T?:?IData{?void?Run(T?data);}?
然后我们分别定义不同类型的数据和操作类:
代码
class?AddData?:?IData{public?int?A1,?A2; ?
public?void?method()?{?}}class?Add?:?IOperationAddData ?
{public?void?Run(AddData?d) ?
{Console.WriteLine(d.A1?+?d.A2);}} ?
class?ComplexData?:?IData{public?void?method()?{?} ?
public?int?A1,?A2,?B1,?B2;} ?
class?ComplexAdd?:?IOperationComplexData{ ?
public?void?Run(ComplexData?d){Console.WriteLine({0}+{1} ?
i,d.A1?+?d.A2,d.B1+d.B2);}}?
这里如果能这样使用我们认为应该是安全的:
IOperationIData?opr?=?new?Add();opr.Run(data1); ?
opr?=?new?ComplexAdd();opr.Run(data2);?
然而这样的代码是无法通过编译的,尽管我们知道它们的使用绝对安全的,因为AddData或Comple
您可能关注的文档
- 解析函数是复变函数论所研究的主要对象.ppt
- 解秘针灸秘传十八绝招.doc
- 解读Win 7常见误区和困惑.doc
- 解读直方图的含义.doc
- 计算机二级公共基础知识-【免费下载】.doc
- 计算机仿真白酒勾兑与调味.pdf
- 计算机图像处理技术在纺织品测试中的应用.pdf
- 计算机图形学的CAI设计.pdf
- 计算机基础知识(99页).doc
- 计算机基础知识第9章.ppt
- 2024计算机四级题库检测试题打印及一套参考答案详解.docx
- 全国一体化算力网络的构建与应用研究.docx
- 2025年仓储物流行业工业机器人视觉识别技术解决方案研究报告.docx
- 2024计算机四级题库检测试题打印【巩固】附答案详解.docx
- 2025年人工智能辅助诊断系统在基层医疗领域的应用与挑战分析.docx
- 2025年仓储物流领域工业机器人视觉识别技术产业政策解读报告.docx
- 2024计算机四级题库检测试题打印及参考答案详解【典型题】.docx
- 2025年代码生成大模型在软件开发中的应用场景与实施策略报告.docx
- 绿色经济培训课件.ppt
- 数字游戏音乐中的跨文化共情机制研究.docx
最近下载
- 人教PEP版小学英语五年级 下册(1-6单元)思维导图.pdf
- 国际金融附微课杜玉兰习题答案.docx VIP
- 2023年大连大学计算机科学与技术专业《计算机系统结构》科目期末试卷A(有答案).docx VIP
- 2023年大连大学计算机科学与技术专业《计算机网络》科目期末试卷B(有答案).docx VIP
- 知识产权法智慧树知到期末考试答案章节答案2024年同济大学.docx VIP
- 临床医学教学模式创新与课堂互动设计.pptx
- 生猪屠宰兽医卫生检验人员理论考试题库资料及答案.pdf VIP
- 天津市静海区2024-2025学年高一下学期6月学生学业能力调研试题 地理试卷含答案.docx VIP
- 有限空间安全作业技术交底.docx VIP
- 消防设施操作员(中级监控方向)理论知识考试题库(含答案解析).pdf VIP
文档评论(0)