随笔分类 -  C#语言探讨

摘要:提高程序的运行性能,除了选用高性能的硬件(高性能CPU、内存、硬盘等)之外,在软件上也要下功夫进行优化。优化涉及的方面很多,代码优化是其中很重要的环节。本文从“黑盒”角度举了几个例子并进行实际测试,以揭示不同方法的实现性能。 阅读全文
posted @ 2022-01-20 22:41 野峰-WildPeak 阅读(1167) 评论(4) 推荐(4) 编辑
摘要:扩展原有类型的机制(手段)有类的继承,还有 C# 中的扩展方法。 类的继承通过增加新成员,可以扩展原有类型的数据成员(fields);可以定义新方法或重写被继承类的虚方法来扩展原有类型的方法成员(methods)。但继承机制也存在自己的问题,如果原有类型声明为封闭类型(sealed class),则无法使用继承机制扩展原有类型(如上述的 String class)。再者,导出类(derived class)对基类(base class)的扩展是作用在导出类上的,而非对基类自身的扩展。 扩展方法弥补了继承机制的不足。严格说来,扩展方法不是语言本身的机制,而是通过编译程序实现的语法便用设施。不管原有类型是封闭类型还是开放类型,都可以用扩展方法进行扩展。扩展方法只是扩展原有类的方法成员,并不能扩展原有类的数据成员。 阅读全文
posted @ 2014-08-08 22:42 野峰-WildPeak 阅读(1968) 评论(0) 推荐(0) 编辑
摘要:这样一段代码:.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 阅读全文
posted @ 2012-12-04 22:47 野峰-WildPeak 阅读(4085) 评论(4) 推荐(3) 编辑
摘要:数值型(Numeric)数据的类型转换,对任何程序语言来说,都是基本功能,C# 也不例外。C# 的类型转换有两种基本形式:隐式(implicit)和显式(explicit),如下例:int x = 345;long y = x;short z = (short)x;其中,y = x,即将整型 x 转换为长整型 y,称为 隐式类型转换,即由编译器自动完成类型转换。因为编译器知道,整型数转换为长整型数,不会有任何精度损失。z = (short)x,即将整型 x 转换为 短整型 z,称为 显式类型转换,即需要程序员明确指出转换的目的类型。因为编译器知道,整型转换为短整型,可能会产生精度损失,所以不能 阅读全文
posted @ 2012-12-01 03:30 野峰-WildPeak 阅读(628) 评论(0) 推荐(0) 编辑
摘要:这本书的作者是兄弟俩,哥哥 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. . 阅读全文
posted @ 2012-12-01 03:29 野峰-WildPeak 阅读(296) 评论(0) 推荐(0) 编辑
摘要: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 阅读(514) 评论(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 阅读(153) 评论(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 阅读(270) 评论(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 阅读(347) 评论(0) 推荐(0) 编辑