`
txf2004
  • 浏览: 6854573 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C# 泛型用法说明

 
阅读更多

泛型是 C#2.0 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作.
使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。
泛型最常见的用途是创建集合类。

.NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayListHashTable等。下面我们就来说下,几个泛型集合类的用法:
.DictionaryHashTable类似
此类在 .NET Framework 2.0 版中是新增的。表示键和值的集合。命名空间:System.Collections.Generic,程序集:mscorlib(在 mscorlib.dll 中)
class TestGenericList
{
static void Main()
{
//
声明对象,参数表示,键是int类型,值是string类型
Dictionary<int, string> fruit = new Dictionary<int, string>();
try{
//
加入重复键会引发异常
fruit.Add(1, "
苹果");
fruit.Add(2, "
桔子");
fruit.Add(3, "
香蕉");
fruit.Add(4, "
菠萝");
//
参数错误将引发异常,如下所示
//fruit.Add("5", "aa");
}
catch (ArgumentException)
{
Console.WriteLine("
添加错误!!!");
}
//因为引入了泛型,所以键取出后不需要进行Objectint的转换,值的集合也一样
foreach (int i in fruit.Keys)
{
Console.WriteLine("
键是:{0} 值是:{1}",i,fruit);
}
按键值对遍历:
foreach(KeyValuePair keyValue in
fruit)
{
Console.WriteLine("
键是:{0} 值是:{1}", keyValue.Key, keyValue.Value);
}
//
删除指定键,值
fruit.Remove(1);
//
判断是否包含指定键
if (fruit.ContainsKey(1))
{
Console.WriteLine("
包含此键");
}
//
清除集合中所有对象
fruit.Clear();
}
}
Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同,其它方法如:ContainsKey ContainsValue Remove 等,使用方法基本一致。
二、List
注意:此类在 .NET Framework 2.0 版中是新增的。表示可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法。命名空间:System.Collections.Generic,程序集:mscorlib(在 mscorlib.dll 中),List 类是 ArrayList 类的泛型等效类。
//声明一个泛型类
class TestGenericList
{
static void Main()
{
//
声明一个List对象和ArrayList对应,只加入string参数
List<string> names = new List<string>();
names.Add("
乔峰");
names.Add("
欧阳峰");
names.Add("
马蜂");
//
遍历List
foreach (string name in names)
{
Console.WriteLine(name);
}
//
List中插入元素
names.Insert(2, "
张三峰");
//
移除指定元素
names.Remove("
马蜂");
}
}
在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。
如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。
其实我们也可以自己定义一个泛型类,如下所示:
//
声明一个泛型类
public class ItemList<T>
{
void Add(T item) { }
}
class TestGenericList
{
private class ExampleClass { }
static void Main()
{
//
声明一个对象,只能加入int
ItemList<int> list1 = new ItemList<int>();
//声明一个对象,只能加入Student类型,Student类为自定义类
ItemList<Student> list2 = new ItemList<Student>();
}
}
泛型的用法还有很多种,如泛型方法,泛型委托,泛型接口等。
分享到:
评论

相关推荐

    C#泛型集合使用实例

    C#泛型集合使用实例C#泛型集合使用实例C#泛型集合使用实例

    C#泛型,非泛型实现枚举

    C#泛型,非泛型实现枚举功能,通过实现接口方法或者使用迭代器块实现

    C# 泛型委托示例 应用解析

    这是一个泛型委托的示例,主要是让初学者了解泛型委托的用法,虽然很简单,但是代码有注释,我的这个例子是在vs2010中做的,用vs08的朋友们,最好还是转一下,但是绝对能实现(本程序是控制台应用程序,适合初学者)...

    C#泛型学习

    C# 泛型 为什么使用泛型 泛型类实例化的理论 泛型类的不同的封闭类是分别不同的数据类型 泛型类中数据类型的约束 泛型方法 静态构造函数 方法重载 使用范围

    C#泛型参数多线程与复杂参数多线程2

    最近用多线程用的比较多自己走了一些弯路,分享出来希望大家少走弯路,C#中的多线程有两个重载,一个是不带参数的,一个是带参数的,但是即便是带参数的多线程也不支持泛型,这使得使用泛型参数多线程的时候很不方便...

    C# 简单 泛型 用法

    这是 一个很基础的 程序 只提供初学者看 ,

    C#泛型学习实例

    C#泛型学习实例 里面包括泛型类,泛型方法,泛型接口,泛型抽象类,泛型抽象方法等多种泛型使用实例

    有关c#泛型详细学习基础

    c#泛型学习的详细资料,里面包括的泛型的各种用法与实例

    c#泛型方法 实现整数 复数

    泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写...

    C# 泛型数组学习小结

    这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的数据很有用。IList&lt;T&gt; 接口不能用于在数组中添加或移除元素;如果试图在此上下文中调用 IList&lt;T&gt; 方法(如数组的 ...

    C#泛型的用法

    泛型在开发中非常重要,有必要查看此文档,通俗易懂

    C#泛型实例详解

    本文以实例形式讲述了C#泛型的用法,有助于读者深入理解C#泛型的原理,具体分析如下: 首先需要明白什么时候使用泛型: 当针对不同的数据类型,采用相似的逻辑算法,为了避免重复,可以考虑使用泛型。 一、针对类的...

    c#泛型详解,泛型方法,泛型类

    泛型详解,C#是强类型语言。作为一个程序员,当你使用这些语言时,总会期望编译器进行类型安全的检查。例如,如果你把对一个Book类型的引用转换成一个Vehicle型的引用,编译器将告诉你这样的cast是无效的。

    C#泛型参数多线程与复杂参数多线程

    最近用多线程用的比较多自己走了一些弯路,分享出来希望大家少走弯路,C#中的多线程有两个重载,一个是不带参数的,一个是带参数的,但是即便是带参数的多线程也不支持泛型,这使得使用泛型参数多线程的时候很不方便...

    C#泛型用法实例分析

    主要介绍了C#泛型用法,实例分析了C#泛型的功能、定义与使用技巧,需要的朋友可以参考下

    C# 2.0中泛型编程思想分析

     本文讨论泛型使用的一般问题,比如为什么要使用泛型、泛型的编写方法、泛型中数据类型的约束、泛型中静态成员使用要注意的问题、泛型中方法重载的问、泛型方法等,通过这些使我们可以大致了解泛型并掌握泛型的一般...

    适合初学者的C# 泛型详解

    本文讨论泛型处理的问题空间、它们的实现方式、该编程模型的好处,以及独特的创新(例如,约束、一般方法和委托以及一般继承)。此外,本文还讨论 .NET Framework 如何利用泛型。

    C#泛型委托的用法实例分析

    主要介绍了C#泛型委托的用法,以实例形式较为详细的分析了C#委托的功能与相关使用技巧,需要的朋友可以参考下

    C#泛型约束的深入理解

    where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量。...这样的约束一经使用,就必须出现在该类型参数的所有其他约束之前。 代码如下:class MyClassy&lt;T&gt;where T : classwhere U

Global site tag (gtag.js) - Google Analytics