CSharp 特性[2009-09-04]

  了解 CSharp 语言相关特性,对面向对象的编程有很大好处,作为 CSharp 程序员来说很有必要对它们进行了解,其实很多程序员在编程过程当中对 CSharp 的相关术语不太了解,盲目使用而不知其解。下面我将对一些特性进行解释,或许自己的理解不太正确,希望大家帮忙改正。为了以防将来对这些特性更深刻的了解,我对此文章加以日期为版本号。

  1、抽象类接口的区别

   这个问题是一个看起来简单,但是很多程序员都说不出来到底是怎么回事的问题。抽象类和接口的区别大致有以下几点:

  • [a]一个类只能继承一个抽象类;但是可以继承多个接口;
  • [b]接口由属性、方法、事件、索引器组成,但不包括字段;但是抽象类拥有所有类的成员并且可以包含字段;
  • [c]接口的成员仅仅只有声明没有任何实现,并且它们都是抽象的公共的;但是抽象类的成员就不同了,它们可以是抽象的没有任何实现的,也可以是实在的有实现的成员;
  • [d]抽象类不能被密封。

  2、结构的区别

   又一个有关类和什么数据类型的区别问题,要记好哦。

  • [a]类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存。而结构为值类型在栈上分配,结构的赋值将分配一个新的对象;
  • [b]类有构造函数和析构函数,而结构没有;
  • [b]类可以继承和被继承,结构不可以继承和被继承,但可以继承自接口。

  3、overrideoverload 的区别

   这个问题比较简单,相信很多人都了解,不过在面向对象的编程过程中多态的运用中非常重要。

  • [a]override 重写,改写(或者说覆盖)来自父类的成员;
  • [b]overload 重载,让同一个成员名产生不同的功能。

  4、refout 以及 params 关键字的区别

   三者都是修饰参数的关键字,我们在 debug 时的报错不断的了解了它们。

  • [a]ref 引用参数,使参数按引用传递,其效果是当参数传递给方法时,方法中对参数的任何改变都反映在该变量中;
  • [b]out 输出参数,与 ref 修饰参数有同样功效,不同之处在于 ref 参数在使用前必须对变量进行初始化;
  • [c]params 可变数目参数,在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

  5、什么是索引

   索引器允许类或结构的实例就像数组一样进行索引。

  6、什么是委托

   委托是一种引用方法的类型,一旦委托分配了方法,它将与该方法有完全相同的行为。

  7、什么是泛型

   泛型是将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。

   泛型约束

  • [a]T : struct   类型参数必须是值类型。
  • [b]T : class  类型参数必须是引用类型。
  • [c]T : new()  类型参数必须具有无参数的公共构造函数。
  • [d]T : <class>  类型参数必须是指定的基类或者其派生类。
  • [e]T : <interface> 类型参数必须是指定接口
  • [f]T : U    裸类型约束,及为 T 提供的类型参数必须是为 U 提供的参数或者派生自为 U 提供的参数。

  8、如何才能使用 foreach 语句

   数组或这实现 System.Collections.IEnumerable 或 System.Collections.Generic.IEnumerable<T> 接口的对象集合,都可以使用 foreach 语句循环访问集合,用以获取用户想要的信息,当使用时请注意不要添加或删除集合中项,否则会带来意想不到的后果,如需在集合中进行添加或删除操作请不妨使用 for 语句。

  To be continued! @ CSharp

posted @ 2010-09-05 01:55  佳佳李  阅读(1055)  评论(0编辑  收藏  举报