浅谈C#中的泛型
1、什么是泛型?
泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写
代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
2、泛型的运用
3、泛型的类型
大概有以下几个集合类型:
(1). List,这是我们应用最多的泛型种类,它对应ArrayList集合。
(2). Dictionary,这也是我们平时运用比较多的泛型种类,对应Hashtable集合。
(3). Collection对应于CollectionBase
(4). ReadOnlyCollection 对应于ReadOnlyCollectionBase,这是一个只读的集合。
(5). Queue,Stack和SortedList,它们分别对应于与它们同名的非泛型类。
4、泛型的简单举例
这个类是Person类的操作类,可以自由的增加或删除Person类.如果现在要为其他的类写一个功能与这个类一样的操作类,相信只需要将Person类替换一下就可以了.不过在了解泛型之后你就可以这样来用.
List<Person> persons = new List<Person>();
persons.Add(new Person());
Person person = persons[0];
比如,如果要将Person类换成Employee类,只需要像这样写.
List<Employee> employees= new List<Employee>();
employees.Add(new Employee());
Employee employee= employees[0];
List是C#中已经定义好的泛型类,现在我们可以自己定义它.
5、运用到实例中,使用泛型和非泛型的举例
class Program
{
static void Main(string[] args)
{
#region 使用非泛型ArrayList
/*ArrayList array = new ArrayList();
array.Add(10);//int是值类型,而Add方法只接受引用类型(object),所以对值类型进行了装箱操作(object(10))
array.Add("刘能");
array.Add(DateTime.Now);//DateTime是值类型,而Add方法只接受引用类型(object),所以对值类型进行了装箱操作
Person p = new Person();
p.Name = "藤香";
p.Age = 20;
array.Add(p);
//double mianji = Math.PI * (int)array[0]*(int)array[0];
double mianji = Math.PI * Convert.ToInt32(array[0]) * Convert.ToInt32(array[0]);
Int32 num = 10;
Console.WriteLine(num + num);
Console.WriteLine(mianji);
//foreach (object obj in array)
//{
// Console.WriteLine(obj);
//}*/
#endregion
#region 使用泛型List,凡是能够使用数组的地方,都可以使用list,哪怕你是多维数组
List<string> list = new List<string>();
list.Add("10");
#endregion
Console.ReadKey();
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
浅谈C#中的泛型的更多相关文章
- 浅谈Java中的泛型
泛型是Java自JDK5开始支持的新特性,主要用来保证类型安全.另外泛型也让代码含义更加明确清晰,增加了代码的可读性. 泛型的声明和使用 在类声明时在类名后面声明泛型,比如MyList<T> ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Linux中的信号处理机制(二)
首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 转【】浅谈sql中的in与not in,exists与not exists的区别_
浅谈sql中的in与not in,exists与not exists的区别 1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...
- 浅谈iOS中的userAgent
浅谈iOS中的userAgent User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- 浅谈sql中的in与not in,exists与not exists的区别
转 浅谈sql中的in与not in,exists与not exists的区别 12月12日北京OSC源创会 —— 开源技术的年终盛典 » sql exists in 1.in和exists ...
随机推荐
- 我的cocos2d-x集成sharesdk之旅(转)
链接地址:http://blog.csdn.net/yeungxuguang/article/details/18227153 本文出自:http://www.iteye.com/topic/1130 ...
- js中的总结汇总(以后的都收集到这篇)
点1:js中的比较字符串是否相等,js中是用"=="这个来判断是否相等,这点跟java中不一样,java中是.equals()这种方法. 在之前写的ajax的demo中,因为用了. ...
- 网络编程(UDP协议-聊天程序)
网络编程中的UDP协议中聊天程序,发送端口,和接受端口. 发送端口(Send): <span style="font-size:18px;">package cn.it ...
- 理解iOS 8中的Self Sizing Cells和Dynamic Type
http://www.cocoachina.com/ios/20140922/9717.html 在iOS 8中,苹果引入了UITableView的一项新功能--Self Sizing Cells,对 ...
- Chapter 14 观察者模式
观察者模式又叫做发布-订阅模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式所做的工作其 ...
- 纯JAVA驱动:sqlserver版本不同,驱动与连接也有所区别
纯JAVA驱动:// 2005 版本:驱动:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");连接:”jd ...
- hibernate对应的annocation版本
Hibernate Compatibility Matrix Package Version Core Annotations EntityManager Validator Search Shard ...
- hackyviewpager有什么用
继承于viewpager 可以和photoView一起使用,实现相册图片的左右滑动,放大缩小,等 package davidwang.tm.view; import android.content.C ...
- 引用 模块编译Makefile模板
本文转载自geyingzhen<模块编译Makefile模板> 引用 geyingzhen 的 模块编译Makefile模板 ifneq ($(KERNELRELEASE), ) // ...
- Xcode4.5 本地化,多语言设置
网上已有很多关于ios本地化的博客和资料,由于部分原作者使用的Xcode版本较早,4.5以后的版本已不再支持该方法,后来也没有更新,因此在此写一点学习资料分享出来.废话不多说. ios本地化主 ...