【C#高级】泛型(一)
2024-08-22 00:35:26
泛型,.net 2.0之后出现,基本只要代码中出现 ‘<>’ 尖括号就可以确定是泛型。
在2.0之前大多是使用Object来代替,因为所有类都是Object的派生类,根据继承的原理Object可以代替所有派生类,相反他的派生类也可以代替他的基类
class Program
{
static void Main(string[] args)
{
int paramInt = ;
string paramString = "字符串";
DateTime parmDateTime = DateTime.Now; Console.WriteLine("这是Object方法调用方法传递。");
ObjectMethod.ObjectGo(paramInt);
ObjectMethod.ObjectGo(paramString);
ObjectMethod.ObjectGo(parmDateTime); Console.ReadLine();
}
}
public static class ObjectMethod
{
public static void ObjectGo(object param)
{
Console.WriteLine("这是Object方法接收到的参数:{0} ,参数类型:{1}",param,param.GetType());
}
}
上面这个例子,大家也能看到,当想使用一个方法来接多种类型的参数时使用了Object类型,这是一种很古老的写法了,而且在装箱拆箱上面也有问题,因为这个ObjectGo方法并不清楚他要接收什么类型的参数,可能是string可能是int,也可能是其他自定义类型,简单点说就是可能是值类型也有可能是引用类型,比如当我int类型的参数向方法中传递时,应为int类型为引用类型在栈中存储而Object是值类型在堆中存储所以当int类型向方法中传递时就会发生一次由栈向堆中内存的Copy也就是一次拆箱,但是当参数传递到方法中时发现参数类型为int引用类型,接着就又装箱。
在2.0之后泛型出来了,完全可以使用泛型来传递参数的类型,从而来避免这一次没有必要的装箱拆箱
public static class GenericMethod
{
public static void GenericGo<T>(T param)
{
Console.WriteLine("这是泛型方法接收到的参数:{0} ,参数类型:{1}", param, param.GetType());
}
}
GenericMethod.GenericGo<int>(paramInt);//<T>可以省略
GenericMethod.GenericGo(paramString);
GenericMethod.GenericGo(parmDateTime);
以下时两个方法分别的运行时间:
最新文章
- spin.js
- POJ3281Dining[最大流]
- CSS Table Gallery
- 关于UIView的方法animateWithDuration:animations:completion:的说明
- 视觉差双排listview效果
- 关于js unshift() 与pop() 功能
- c# 前端写代码的情况
- hdoj 1342 Lotto【dfs】
- Ubuntu上安装jdk,Jboss
- HashTable 及应用
- UIScrollView 滑动试图
- Chrome console(转)
- SQL拼接方法
- zencart_magiczoom
- 自己动手实现一个Android Studio插件
- LeetCode Javascript实现 100. Same Tree 171. Excel Sheet Column Number
- 跨界!Omi 发布多端统一框架 Omip 打通小程序与 Web 腾讯开源 2月28日
- 使用phpunit测试yaf项目操作步骤
- 分布式一致性算法2PC和3PC
- 表单中Readonly和Disabled的区别:readonly在get和post可传值到后端,disabled不可