摘要:
正式版的封面设计,比之前的预览版强很多!第三版的封面沿用的是 Microsoft Press 的统一风格,这版非常个性,也说明 CLRvia C# 这本书,经过 1 版、2 版、3 版,到第 4 版,已经确立了自己的江湖地位!这本书是透过 C#这扇窗,向开发者展示 CLR 内部的原理、机制,以及 FCL 的一些设施。和 Bill Venners 的 Inside Java Virtual Machine 不同,并不是条分缕析 CLR 的内部实现(Microsoft 也不会允许 :-)),而是针对开发者的需要,深入探讨 CLR 内部原理的、机制性的东西,适合于中高级开发者,特别是大型系统、类库、 阅读全文
摘要:
这样一段代码:.class public auto ansi Test extends [mscorlib]System.Object{.method public static pinvokeimpl("msvcrt.dll" cdecl)int32 sscanf(string, string, int32&) cil managed { }.field public static int32 val.method public static void Main() cil managed{.entrypoint.locals init (int32 n)ldst 阅读全文
摘要:
数值型(Numeric)数据的类型转换,对任何程序语言来说,都是基本功能,C# 也不例外。C# 的类型转换有两种基本形式:隐式(implicit)和显式(explicit),如下例:int x = 345;long y = x;short z = (short)x;其中,y = x,即将整型 x 转换为长整型 y,称为 隐式类型转换,即由编译器自动完成类型转换。因为编译器知道,整型数转换为长整型数,不会有任何精度损失。z = (short)x,即将整型 x 转换为 短整型 z,称为 显式类型转换,即需要程序员明确指出转换的目的类型。因为编译器知道,整型转换为短整型,可能会产生精度损失,所以不能 阅读全文
摘要:
这本书的作者是兄弟俩,哥哥 Joseph 是鼎鼎大名的LINQPad 的作者,弟弟是前微软公司的 Program Manager。本书涵盖了 C# 5.0 的最新特性,厚达 1064 页!亚马逊上评为 5 颗星。编者写的介绍中,有这样一句话:Shaped by more than 20 expert reviewers, including Microsoft’s Eric Lippert, Stephen Toub, Chris Burrows, and Jon Skeet, this book has all you need to stay on track with C# 5.0. . 阅读全文
摘要:
一段简单的访问 Access 数据库的测试代码:using System;using System.Data.OleDb;public class DbTest{ public static void Main() { string cnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb"; OleDbConnection cn = null; try { cn = new OleDbConnection(cnstr); cn.Open(); Console.WriteLine("Database 阅读全文
摘要:
C/C++中的指针是一种非常灵活而强大的引用机制,但同时也非常脆弱,稍有不慎,就会出错。Java完全摈弃了指针的概念,而代之以对象引用(object reference),基本上消灭了由指针而导致的错误。C#借鉴了Java的作法,引入了对象引用的概念,但同时,不像Java做的那么绝,仍然提供了指针的概念。CLR支持三种类型的指针:1) 托管指针(managed pointers)2) 非托管指针(unmanaged pointers)3) 非托管函数指针(unmanaged function pointers)托管指针是一种新类型的指针,指向托管堆中的内存区。非托管指针是传统的C/C++指针, 阅读全文
摘要:
public interface IEnumerable{ IEnumerator GetEnumerator();}public interface IEnumerator{ bool MoveNext(); void Reset(); Object Current { get; }}IEnumerable和IEnumerator有什么区别?这是一个很让人困惑的问题(在很多forum里都看到有人在问这个问题)。研究了半天,得到以下几点认识:1、一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator objec 阅读全文
摘要:
前文讨论了什么是C#中的委托,那么,C#为什么要引入委托呢?让我们把话题扯远一点,先来看一个著名的排序算法。ACM图灵奖获得者、微软剑桥研究院的首席科学家 C. A. R. Hoare,1960年作为前苏联莫斯科国立大学的访问学生,在从事一个机器翻译的项目时,为了对要翻译的词进行排序,开发了一个高效排序算法,这就是大名鼎鼎的快速排序算法——QuickSort。快速排序的平均时间复杂度是O(nlogn),最坏时间复杂度是O(n2),实际上QuickSort比其他的O(nlogn)算法往往要快一些。算法原理QuickSort是一个典型的“分而治之”的算法,在要排序的表(list or array) 阅读全文
摘要:
什么是委托(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 阅读全文