强类型和弱类型的区别

1994_ 贡献于2016-10-11

作者 Administrator  创建于2014-10-29 12:08:00   修改者Administrator  修改于2016-03-28 04:24:22字数2620

文档摘要:c#泛类型(泛型)以及强类型与弱类型的理解
关键词:

c# 泛类型(泛型) 以及强类型与弱类型的 理解 2011-07-12 15:34:16| 分类: .net编程 | 标签: |举报 |字号大 中 小 订阅 用微信 “扫一扫” 将文章分享到朋友圈。 用易信 “扫一扫” 将文章分享到朋友圈。 下载LOFTER 我的照片书 | [泛型的概念] (1)没有泛型的时候,所有的对象都是以object为基础,如果要使用时必须进行强制类型转换,如果对于值类型,则会导致不断拆箱装箱的过程,对系统消耗很大。 (2)使用泛型时不需要通过object类进行装箱拆箱,使用的时候都会是确定的类型。 (3)泛型的概念一开始是由集合引入,因为集合中的类型都是基于object类。可以在集合中使用泛型类。 (4)泛型不仅仅用于集合,还可以用于委托、接口和方法。 泛型的优点:高性能 ArrayList list1 = new ArrayList(); list1.Add(44); //装箱 int il1 = (int)list1[0];//拆箱 foreach (int i2 in list1) Console.WriteLine(i2); //执行拆箱 频繁的拆箱、装箱操作在没有泛型的时候反复进行,对系统资源消耗很大。可以使用泛型集合。 List list2 = new List(); list2.Add(44); //不执行装箱 int il2 = list2[0];//不执行拆箱 foreach (int i2 in list2) Console.WriteLine(i2); //不执行拆箱 泛型在定义的时候就区分了值类型和引用类型。 泛型的优点:类型安全 ArrayList list = new ArrayList(); list.Add(44); list.Add("mystring"); list.Add(new MyClass()); foreach (int i in list) Console.WriteLine(i); 类型安全在于提前避免异常的出现。 List list2 = new List(); list2.Add(44); //list2.Add("mystring"); //list2.Add(new MyClass()); 直接编译不通过。 泛型的优点:代码的重用与扩展 List这个泛型类在使用时可以根据需要用不同的类型实例化: List list=new List(); list.Add(44); List stringList=new List(); stringList.Add(“mystring”); List myclassList=new List(); myClassList.Add(new MyClass()); 泛型的优点:代码的重用与扩展 定义一个泛型类: public class aaa 注意:这里的T只是一个标识而已,定义成任何字符都可以。 { public void abc(T a) { Console.WriteLine(a); } } 使用它: //使用string实例化 aaa aaa = new aaa(); aaa.abc("aaabbb"); //使用int实例化 aaa bbb = new aaa(); bbb.abc(new object()); Console.Read(); 命名约定 (1)泛型类型的名称用字母T作为前缀。 (2)使用泛型时,使用,如: Public class List {} Public class Linkedlist{} (3)如果泛型类型有特定的要求(例如必须实现一个派生于基类的接口),或者使用了两个或多个泛型类型,就应给泛型类型使用描述性的名称: 比如: public interface ccc { void abc(TTT arg1); } public class aaa:ccc { public void abc(TTT a) { Console.WriteLine(a); } } Public class SortedList{} 泛型集合 泛型集合存在于using System.Collections.Generic下.我们主要介绍如下List ,其它的泛型集合使用请查阅MSDN。   强类型和弱类型指的是两个具有直接或者间接继承关系的两个类。如果一个类是另一个类的直接或者间接基类,那么它为弱类型,直接或者间接子类为强类型。后续的介绍中会用到的两个类Foo和Bar先定义在这里。Bar继承自Foo。Foo是弱类型,而Bar则是强类型。   有了强类型和弱类型的概念,我们就可以这样的定义协变和逆变:如果类型TBar是基于强类型Bar的类型,而类型TFoo是基于弱类型Foo的类型,协变就是将TBar类型的实例赋值给TFoo类型的变量,而逆变则是将TFoo类型的实例赋值给TBar类型的变量。   委托中的协变与逆变的使用   协变和逆变主要体现在两个地方:接口和委托,先来看看在委托中如何使用协变和逆变。现在我们定义了如下一个表示无参函数的泛型委托 Function,类型参数为函数返回值的类型。泛型参数之前添加了一个out关键字表示T是一个协变变体。那么在使用过程中,基于强类型的委托 Fucntion实例就可以赋值给基于弱类型的委托Fucntion变量。 [强类型弱类型] 一直说C#是强类型语言,通俗地讲,便是指C#中的“变量”在开发时的类型便是明确的:String便是String,Int32就是Int32,毫无争议。强类型的好处有很多,张嘴便可随意举上几例: 能够享受代码提示功能 能够获得重构工具的支持 能够在编译期发现更多错误  不过C#也不是“绝对”的强类型语言,因为它也有弱类型,那就是Object。我们知道Object是所有类型的最终基类,任何类型的对象都可以使用 Object来引用。可是一旦转化成Object的变量之后,代码提示便消失了;即使我们“明确”对象的确切类型,也必须通过Cast才能使用——更何况它形成了一种被“滥用”或“误用”的机会。例如一段错误代码可能会传入一个不符合约定类型的对象,那么就会造成错误。更严重的是,这样的错误可能只要在 “运行时”才能被发现,编译器对此无能为力。 摘自:http://hi.baidu.com/morespring/blog/item/fe9220358a03690aebc4afa4.html

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档