C#泛型回顾点滴
前言
C#的泛型一直是学习者津津乐道的课题了,这确实是一个非常有用的特性,不过在实际使用中,还是有很多需要注意的地方,我们需要通过自己动手实践以及结合理论进行理解,最终总结出自己的编码规范和最佳实践
案例1
internal struct TestStruct : IEquatable<TestStruct>
{
bool IEquatable<TestStruct>.Equals(TestStruct other)
{
return true;
}
} internal class TesterClass
{
// Methods
public static bool AreEqual<T>(T arg1, T arg2) where T : IEquatable<T>
{
return arg1.Equals(arg2);
} public static void Run()
{
TestStruct t1 = new TestStruct();
TestStruct t2 = new TestStruct();
Debug.Assert(((IEquatable<TestStruct>)t1).Equals(t2));
Debug.Assert(AreEqual<TestStruct>(t1, t2));
}
}
案例2
class Program
{
static void Main(string[] args)
{
Print1(1);
Print2(1);
Print3(1); string a = "ABC";
string b = "AB";
string c = b + "C"; bool genericEquals = IsEquals<string>(a, c);
bool directEquals = (a == c); Console.ReadKey();
} static void Print1<T>(T item)
where T : struct
{
string s = item.ToString();
} static void Print2<T>(T item)
{
string s = item.ToString();
} static void Print3(int item)
{
string s = item.ToString();
} static bool IsEquals<T>(T t1, T t2)
where T : class
{
return t1 == t2;
} }
思考以上代码,在内部是怎样的执行过程?结果如何?为什么?
要点
- 泛型中的装箱和拆箱
- 泛型中的逆变与协变
未完待续、、、
参考:
http://stackoverflow.com/questions/5531948/how-does-a-generic-constraint-prevent-boxing-of-a-value-type-with-an-implicitly
http://stackoverflow.com/questions/4403055/boxing-unboxing-and-generics
http://stackoverflow.com/questions/390900/cant-operator-be-applied-to-generic-types-in-c
http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx
C#泛型回顾点滴的更多相关文章
- 给女朋友讲解什么是Optional【JDK 8特性】
前言 只有光头才能变强 前两天带女朋友去图书馆了,随手就给她来了一本<与孩子一起学编程>的书,于是今天就给女朋友讲解一下什么是Optional类. 至于她能不能看懂,那肯定是看不懂的.(学 ...
- Day27-28 基础加强
day28基础加强 今日内容 泛型 注解 Servlet3.0 动态代理 类加载器 泛型 回顾泛型类 泛型类:具有一个或多个泛型变量的类被称之为泛型类. public class A<T&g ...
- 通过hibernate封装数据库持久化过程回顾泛型/继承/实现等概念
前言 在开发过程中,我们不难发现,客户的需求以及产品的定位对开发内容的走向有很大的决策作用,而这些往往需要在一开始就尽可能考虑周全和设计完善.为什么说是尽可能,因为我们都知道,需求这种东西,一言难尽. ...
- 回顾javase点滴
数据类型 8种基本数据类型和引用类型 数据类型 占用位数 存储方式 最小值 最大值 默认值 byte 8 1+7 -128(-2^7) 127(2^7-1) 0 short 16 1+15 -3276 ...
- Java学习点滴——泛型
基于<Java编程思想>第四版 前言 虽然Java的泛型在语法上和C++相比是类似的,但在实现上两者是全然不同的. 语法 Java只需要一个<>就可定义泛型.在<> ...
- day1 java基础回顾-泛型
2.泛型(Generic) 当集合中存储的对象类型不同时,那么会导致程序在运行的时候的转型异常 1 import java.util.ArrayList; 2 import java.util.Ite ...
- Spring4学习回顾之路10-Spring4.x新特性:泛型依赖注入
泛型依赖注入:Spring 4.x中可以为子类注入子类对应的泛型类型的成员变量的引用. 话语太过抽象,直接看代码案例,依次建立如下代码: User.java package com.lql.sprin ...
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- C#:泛型(Generic)
前言: 此系列都为个人对C#的回顾,属于个人理解,新司机可参考.求老司机指点.如果有什么问题或不同见解,欢迎大家与我沟通! 目录: 泛型是什么 泛型的好处及用途 如何声明使用泛型 泛型类 泛型方法 ...
随机推荐
- JavaScript权威指南科13章 webj浏览器avascript
13.1 clientjavascript window对象是所有clientjavascript特点和api主要的接入点.它代表了一个浏览器窗口,通过window对象引用它. window 方法 a ...
- IIS 7.0 Features and Vista Editions
原文 IIS 7.0 Features and Vista Editions Overview of IIS 7.0 differences Across Windows Vista Editions ...
- SWOT分析是神马?
SWOT分析是思维的工具来理解事物的方式.人生在世,作为一个独立的实体,不可避免地需要思考的问题.除非你是猪.猪比这更聪明.眠质量,都要完爆白领,蓝领和金领们. SWOT分析分为四个象限.我们用一头名 ...
- 完全背包 (DP)
输入: n=3 (w,v)={(3,4),(4,5),(2,3)} W=7 输出: 10(0号物品选1个,2号物品选2个) 和01背包的区别是物品可以任意选择. 令dp[i+1][j]=从前i种物品中 ...
- 变焦控制ZoomControls
在安卓的webview中有这个点击放大缩小button,当时就在想如何实现那种效果,弄一个两个图标的ImageButton.但感觉又有些麻烦,昨天看疯狂安卓书.无意中发现另一个 ZoomButtons ...
- android如何在代码中设置margin
1.首先看你要设置组件的父容器是什么. 例如,我是FrameLayout其中包括组件.如果调用bottomLayout这是: FrameLayout.LayoutParams lp = new Fra ...
- linux_常用压缩,解压缩命令
01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...
- [CLR via C#]5.4 对象哈希码和dynamic基元类型
原文:[CLR via C#]5.4 对象哈希码和dynamic基元类型 FCL的设计者认为,如果能将任何对象的任何实例放到一个哈希表集合中,会带来很多好处.为此,System.Object提供了虚方 ...
- [CLR via C#]7. 常量和字段
原文:[CLR via C#]7. 常量和字段 7.1 常量 常量(constant)是一个特殊的值,它是一个从不变化的值. 在定义常量时,它的值必须在编译时确定.确定之后,编译器将常量的值保存到程序 ...
- SVN记录使用过程中出现的错误(一)
由于使用SVN时间不长,故障各种奇怪的问题是不可避免的,这里记录,自己的方便还是菜鸟跟我一样的参考 一个问题: dzt@dzt-All-Series:~/D/dzt/workarea/7301_mp/ ...