摘要: C/C++中的指针是一种非常灵活而强大的引用机制,但同时也非常脆弱,稍有不慎,就会出错。Java完全摈弃了指针的概念,而代之以对象引用(object reference),基本上消灭了由指针而导致的错误。C#借鉴了Java的作法,引入了对象引用的概念,但同时,不像Java做的那么绝,仍然提供了指针的概念。CLR支持三种类型的指针:1) 托管指针(managed pointers)2) 非托管指针(unmanaged pointers)3) 非托管函数指针(unmanaged function pointers)托管指针是一种新类型的指针,指向托管堆中的内存区。非托管指针是传统的C/C++指针, 阅读全文
posted @ 2012-03-15 23:32 野峰-WildPeak 阅读(550) 评论(0) 推荐(0)
摘要: public interface IEnumerable{ IEnumerator GetEnumerator();}public interface IEnumerator{ bool MoveNext(); void Reset(); Object Current { get; }}IEnumerable和IEnumerator有什么区别?这是一个很让人困惑的问题(在很多forum里都看到有人在问这个问题)。研究了半天,得到以下几点认识:1、一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator objec 阅读全文
posted @ 2012-03-15 23:31 野峰-WildPeak 阅读(162) 评论(0) 推荐(0)
摘要: 前文讨论了什么是C#中的委托,那么,C#为什么要引入委托呢?让我们把话题扯远一点,先来看一个著名的排序算法。ACM图灵奖获得者、微软剑桥研究院的首席科学家 C. A. R. Hoare,1960年作为前苏联莫斯科国立大学的访问学生,在从事一个机器翻译的项目时,为了对要翻译的词进行排序,开发了一个高效排序算法,这就是大名鼎鼎的快速排序算法——QuickSort。快速排序的平均时间复杂度是O(nlogn),最坏时间复杂度是O(n2),实际上QuickSort比其他的O(nlogn)算法往往要快一些。算法原理QuickSort是一个典型的“分而治之”的算法,在要排序的表(list or array) 阅读全文
posted @ 2012-03-15 23:17 野峰-WildPeak 阅读(282) 评论(0) 推荐(0)
摘要: 什么是委托(what's a delegate)?计算机中的名词术语大部分都是借自日常生活,所以我们先来看看日常生活中“delegate”是什么意思。Merriam-Webster Unabridged Dictionary对“delegate”的定义:A person sent and empowered to act for another.派遣并授权代表某人行事的人。由此可见,“delegate”有委托、代理、代表之意,就是代替(代表)别人去做事(的人)。那么,“delegate”在C#中又是什么意思呢?The C# Programming Language对"dele 阅读全文
posted @ 2012-03-15 23:11 野峰-WildPeak 阅读(383) 评论(0) 推荐(0)