C#基础,为自己补习下

这是一篇半学习半翻译的文章,加了自己的学习体会,自己写代码一般都参考阅读过的代码,变成思路也比较格式化,想想有许多细节的地方需要给自己补充下,在编写代码时,可以提高艺术感,最近在浏览CodeProject时又发现了一些好文章,稍微加工下。例子都来自CodeProject. 原文地址:   http://www.codeproject.com/KB/cs/quickcsharp.aspx

一、集合索引(Indexers)

集合索引的使用,通过下标来获取集合中的元素,像数组一样简单,在继承集合接口的类中只要指定好返回的实例或者元素即可,在语法上索引和属性差不多。

下面是例子:

二、装箱/拆箱

这个概念在一次面试的题目中出现,通过例子有大概意思的描述,但是具体的概念不是很清楚,好吧,有空的时候,补补吧,这些概念也挺烦人的,但是面试官整天鼓捣着这些基础考来考去还是挺无趣的。这些书面基础概念什么的又不能考察一个人的能力,百度下大家就都知道的东西考起来就没有意思,不罗嗦了,补基础:

装箱拆箱这个思想在C#中是新的,衍生于系统命名空间中(System namespance)的基础类对象,因此打包在一个对象中原始的类型被称为装箱。当然,相反的就是拆箱了。下面是例子:

 

上面的例子提供了装箱和拆箱的实例,int值类型的数据可以被转化为对象,然后再被转化回int类型,当变量的值类型必须转换为引用类型时,装箱是为了分配空间来保存其值,装箱中是值的一个备份,拆箱是一个相反的过程,当对象装箱被反射回原来的值类型时,装箱中的值就到了适当的存储位置。

 

 

三、委托

委托使用变量来存储函数引用(function references),类似C++中的使用typedef的函数指针(function pointer),委托使用delegate关键字来声明,看下面的例子来更好的理解委托:

 

 

 

  

 

四、虚函数

虚函数在C#中是实现多态度思想,在子类中使用override关键字来重写虚方法,父类使用virtual关键字声明,所有继承的子类重写都必须使用override关键字。下面是例子:

 

 

五、使用new关键字隐藏父类中的方法

在子类中定义一个new方法,可以隐藏基类中的方法,关键字new用来定义一个新实例,在Rectangle类中使用new关键字来代替override关键字时,注意下面的例子中使用new方法定义的实例,和上面的例子有什么不同。

这段原文如下:

Hiding parent functions using "new"

You can define in a child class a new version of a function, hiding the one which is in base class. A keyword new is used to define a new version. Consider the example below, which is a modified version of above example and note the output this time, when I replace the keyword override with a keyword new in Rectangle class.

说实话,这段原文让我看得有点奇怪,原文中说是隐藏父类中的方法,我调试的时候,应该是暴露父类方法,不进行重写,和之前的override是相反的作用,并且new的用法比较没有限制,不需要父类中有virtual虚方法,才可以进行重写的,如果父类中也是new的方法,就再往上一个父类中实现,在下面的例子中,可以把Rectangle中的Draw方法改成override看看,可以方便理解,感觉老外这点很好,不光说理论,例子摆出来就清楚了,有时候语言上的意思真的没有那么容易懂,看例子就明白了。

 

 

为什么Rectangle类中没有实现Draw方法呢?而是出现了不同的方法,因此,为了避免子类和父类的命名冲突,可以使用new方法。

注意:在同一个类中不能定义相同的的方法名,其中一个使用了new方法,然后再使用override或者virtual定义相同的方法.像上面的例子中一样,在Rectangle类中就不能再使用virtual或者override定义另一个Draw方法。在Shape方法中也一样,不能再定义Draw方法了。

 

小结

写了两年的代码,写得比较杂,在准备写的时候,都没有事先想清楚准备使用什么方法来让代码写得更加好看,使用面向过程的方法不是不可以实现面向对象的功能,思路转变下一样写得出来,但是,再后期维护上非常麻烦,因为面向过程的思路写出的代码有非常多的复制粘贴的代码,而且在复制粘贴中又有点小修改,让人很难发觉,代码非常臃肿,冗余代码非常多,就显得代码行数非常多,原来200行可以实现的,就整成1000行代码,而且是在一个主方法入口中全部实现,就算不是另一个人来维护,自己维护起来也是非常晕的。

因此,只要时间允许,在写代码前,抽象一些对象,方法,接口什么的,是一个非常好的锻炼,只要这么学着去做了,慢慢就会知道其中的好处的。

 

原文地址:http://blog.csdn.net/much0726/archive/2009/11/15/4814081.aspx 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值