C#2.0泛型学习--入门篇
2011-12-27 22:22
351 查看
最近频繁的接触到泛型方面的问题,所以也不得不来学习一下了,开始主要是在MSDN的WebCast上去下载教学录象看的(李建忠老师的),本篇文章先介绍一下泛型入门方面的知识,希望能让刚开始学习泛型的朋友能够更快的入门,言归正传,首先我们来看一下泛型的基本概念:
最显著的一点就是它参数化了类型,把类型作为参数抽象出来,从而使我们在实际的运用当中能够更好的实现代码的重复利用,同时它提供了更强的类型安全,更高的效率,不过在约束方面,它只支持显示的约束,这样在灵活性方面就显得不是那么好了.我觉得它之所以能够提供更高的效率是因为泛型在实例化的时候采用了"on-demand"的模式,即按需实例化,发生在JIT(Just In Time)编译时.
下面来看如何定义一个泛型类,很简单,你只需要意识到一点,在这里,类型已经被参数化了:
using System;
using System.Collections.Generic;
using System.Text;
namespace GenericTest
//如果这样写的话,显然会报找不到类型T,S的错误
//正确的写法应该是
public interface IList<T>
public interface IDictionary<K,V>
// 泛型接口的类型参数要么已实例化
// 要么来源于实现类声明的类型参数
class List<T> : IList<T>, IDictionary<int, T>
在来看一下泛型委托,首先我们定义一个类型参数为T的委托,然后在类中利用委托调用方法:
using System;
using System.Collections.Generic;
using System.Text;
namespace GenericTest
using System;
using System.Collections.Generic;
using System.Text;
namespace GenericTest
最后我们来看一下泛型中的约束:
C#中的泛型只支持显示的约束,因为这样才能保证C#所要求的类型安全,但显示的约束并非时必须的,如果不加约束,泛型类型参数将只能访问System.Object类型中的公有方法。“显式约束”由where子句表达,可以指定“基类约束”,“接口约束”,“构造器约束”,“值类型/引用类型约束”共四种约束。下面的例子来源于李建忠老师的讲座PPT。
1、基类约束:
class C<S,T>
where S: A // S继承自A
where T: B // T继承自B
class Dictionary<K,V>
where K: IComparable<K>
where V: IPrintable, IKeyProvider<K>
class C<T>
where T : new()
C<A> c=new C<A>(); //可以,A有无参构造器
C<B> c=new C<B>(); //错误,B没有无参构造器
4、值/引用类型约束
class C<T>
where T : struct
C<A> c=new C<A>(); //可以,A是一个值类型
C<B> c=new C<B>(); //错误,B是一个引用类型
关于C#泛型入门的知识就这么多了,我也是对着李建忠老师的教学录像来学习的,初学的朋友也可以去下载录像来看:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242246
学习泛型刚刚开始,希望能有高手指点,谢谢!
凡是有该标志的文章,都是该blog博主Caoer(草儿)原创,凡是索引、收藏
、转载请注明来处和原文作者。非常感谢。
最显著的一点就是它参数化了类型,把类型作为参数抽象出来,从而使我们在实际的运用当中能够更好的实现代码的重复利用,同时它提供了更强的类型安全,更高的效率,不过在约束方面,它只支持显示的约束,这样在灵活性方面就显得不是那么好了.我觉得它之所以能够提供更高的效率是因为泛型在实例化的时候采用了"on-demand"的模式,即按需实例化,发生在JIT(Just In Time)编译时.
下面来看如何定义一个泛型类,很简单,你只需要意识到一点,在这里,类型已经被参数化了:
using System;
using System.Collections.Generic;
using System.Text;
namespace GenericTest
//如果这样写的话,显然会报找不到类型T,S的错误
//正确的写法应该是
public interface IList<T>
public interface IDictionary<K,V>
// 泛型接口的类型参数要么已实例化
// 要么来源于实现类声明的类型参数
class List<T> : IList<T>, IDictionary<int, T>
在来看一下泛型委托,首先我们定义一个类型参数为T的委托,然后在类中利用委托调用方法:
using System;
using System.Collections.Generic;
using System.Text;
namespace GenericTest
using System;
using System.Collections.Generic;
using System.Text;
namespace GenericTest
最后我们来看一下泛型中的约束:
C#中的泛型只支持显示的约束,因为这样才能保证C#所要求的类型安全,但显示的约束并非时必须的,如果不加约束,泛型类型参数将只能访问System.Object类型中的公有方法。“显式约束”由where子句表达,可以指定“基类约束”,“接口约束”,“构造器约束”,“值类型/引用类型约束”共四种约束。下面的例子来源于李建忠老师的讲座PPT。
1、基类约束:
class C<S,T>
where S: A // S继承自A
where T: B // T继承自B
class Dictionary<K,V>
where K: IComparable<K>
where V: IPrintable, IKeyProvider<K>
class C<T>
where T : new()
C<A> c=new C<A>(); //可以,A有无参构造器
C<B> c=new C<B>(); //错误,B没有无参构造器
4、值/引用类型约束
class C<T>
where T : struct
C<A> c=new C<A>(); //可以,A是一个值类型
C<B> c=new C<B>(); //错误,B是一个引用类型
关于C#泛型入门的知识就这么多了,我也是对着李建忠老师的教学录像来学习的,初学的朋友也可以去下载录像来看:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242246
学习泛型刚刚开始,希望能有高手指点,谢谢!
凡是有该标志的文章,都是该blog博主Caoer(草儿)原创,凡是索引、收藏
、转载请注明来处和原文作者。非常感谢。
相关文章推荐
- C#2.0泛型学习--入门篇
- C#2.0泛型学习--入门篇
- C#2.0 泛型学习(入门)
- C#2.0泛型学习--入门篇
- C#2.0泛型学习--入门篇
- C#2.0泛型学习--入门篇
- C#2.0泛型学习--入门篇
- C# 2.0学习之--泛型
- C# 2.0学习之--泛型
- C#入门经典学习12-泛型2
- 学习C#2.0新特性:泛型!
- C#2.0泛型学习
- C#2.0学习6--泛型
- C#2.0泛型学习
- [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
- C# in Depth Third Edition 学习笔记-- C#2.0: 解决C#1.0的问题 1 泛型
- 系统的学习C#2.0中的泛型
- c#2.0泛型学习(一) _C#教程
- C#泛型入门学习泛型类、泛型集合、泛型方法、泛型约束、泛型委托
- 系统的学习C#2.0中的泛型