C#中 const 和 readonly 的区别

const 的概念就是一个包含不能修改的值的变量。常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的。 readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值。因为 readonly 是在计算时执行的,当然它可以用某些变量初始化。readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活。readonly 关键字与 const 关键字不同。1. const 字段只能在该字段的声...
2007-10-26 02:58 | 阅读 1805 次 | 评论 0 条

C# 中的委托和事件(5)

.Net Framework中的委托与事件 尽管上面的范例很好地完成了我们想要完成的工作,但是我们不仅疑惑:为什么.Net Framework 中的事件模型和上面的不同?为什么有很多的EventArgs参数? 在回答上面的问题之前,我们先搞懂 .Net Framework的编码规范: l 委托类型的名称都应该以EventHandler结束。 l 委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。 l 事件的命名为 委托去掉 E...
2007-10-21 17:43 | 阅读 895 次 | 评论 0 条

C# 中的委托和事件(4)

事件和委托的编译代码 这时候,我们注释掉编译错误的行,然后重新进行编译,再借助Reflactor来对 event的声明语句做一探究,看看为什么会发生这样的错误: public event GreetingDelegate MakeGreet; 可以看到,实际上尽管我们在GreetingManager里将 MakeGreet 声明为public,但是,实际上MakeGreet会被编译成 私有字段,难怪会发生上面的编译错误了,因为它根本就不允许在GreetingManager类的外面以赋值的方式访问,从而验证了我们上面所做的推论。 我们再进一步看下MakeGr...
2007-10-21 17:42 | 阅读 1061 次 | 评论 0 条

C# 中的委托和事件(3)

事件的由来 我们继续思考上面的程序:上面的三个方法都定义在Programe类中,这样做是为了理解的方便,实际应用中,通常都是 GreetPeople 在一个类中,ChineseGreeting和 EnglishGreeting 在另外的类中。现在你已经对委托有了初步了解,是时候对上面的例子做个改进了。假设我们将GreetingPeople()放在一个叫GreetingManager的类中,那么新程序应该是这个样子的: namespace Delegate { //定义委托,它定义了可以代表的方法的类型 public delegate void Greeti...
2007-10-21 17:40 | 阅读 1016 次 | 评论 0 条

C# 中的委托和事件(2)

将方法绑定到委托 看到这里,是不是有那么点如梦初醒的感觉?于是,你是不是在想:在上面的例子中,我不一定要直接在GreetPeople()方法中给 name参数赋值,我可以像这样使用变量: static void Main(string[] args) { string name1, name2; name1 = "Jimmy Zhang"; name2 = "张子阳"; GreetPeople(name1, EnglishGreeting); GreetPeople(name2, ChineseGreeting); Console.ReadK...
2007-10-21 17:39 | 阅读 944 次 | 评论 0 条

C# 中的委托和事件(1)

引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、委托和事件对Observer设计模式的意义、.Net Framework中的委托和事件,对它们的中间代码也做了讨论。 将方法作为方法的参数 我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输...
2007-10-21 17:38 | 阅读 999 次 | 评论 0 条

理解C#中的string类型

目的 本文的目的在于揭示和DOTNET及C#相关的一些常见的和不常见的问题。在这些问题中我的第一篇文章和string数据类型有关,string数据类型是一种引用类型,但是当和其他引用类型比较的时候,很多开发人员可能并不能完全理解它的行为。 问题 对于常见的引用类型,当改变一个对象别名的值时,这种变化也同样会在一个实际的对象中表现出来;反之亦然。但是对于string类型,似乎不是这样的。 解释 引用类型 假设我们有一个类MyType,这个类有一个属性Name;我们还有一个类AppType,这个...
2007-03-19 21:57 | 阅读 852 次 | 评论 0 条

构造正则表达式

C#正则表达式符号模式 字 符 \:转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来 ^:匹配输入字符串的开始位置 $:匹配输入字符串的结束位置 *:匹配前面的零次或多次的子表达式 +:匹配前面的一次或多次的子表达式 ?:匹配前面的零次或一次的子表达式 {n}:n是一个非负整数,匹配前面的n次子表达式 {n,}:n是一个非负整数,至少匹配前面的n次子表达式 {n,m}:m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次 ?:当该字符紧跟在其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式尽可能少的匹配所搜索的字符串 ...
2007-03-18 22:16 | 阅读 699 次 | 评论 0 条

正则表达示收藏

正则表达式基础知识 基本语法 在正则表达式中拥有一套自己的语法规则,常见语法包括;字符匹配、重复匹配、字符定位、转义匹配和其他高级语法(字符分组、字符替换和字符决策); 字符匹配语法: 字符语法 语法解释 语法例子 \d 匹配数字(0~9) ‘\d’匹配8,不匹配12; \D 匹配非数字 ‘\D’匹配c,不匹配3; \w 匹配任意单字符 ‘\w\w’ 匹配A3,不匹配@3; \W 匹配非单字符 ‘\W’匹配@,不匹配c; \s 匹配空白字符 ‘\d\s\d’匹配3 d,不匹...
2007-01-18 20:57 | 阅读 849 次 | 评论 0 条

VB.NET中得到计算机硬件信息

本文汇集了在.NET中得到计算机硬件信息的一些功能。 得到显示器分辨率 Dim X As Short = System.Windows.Forms.Screen.PrimaryScreen.Bounds.WidthDim Y As Short = System.Windows.Forms.Screen.PrimaryScreen.Bounds.HeightMsgBox("您的显示器分辨率是:" &amp; X &amp; " X " &amp; Y)得到特殊文件夹的路径 '"Desktop"桌面文件夹路径MsgBox(Environment.GetFolderPath(Environm...
2006-12-07 05:07 | 阅读 1179 次 | 评论 0 条

Professional.C.Sharp.2005 读书笔记(2)

详细介绍中间语言 下面就是中间语言的主要特征: ● 面向对象和使用接口 ● 值类型和引用类型之间的巨大差别 ● 强数据类型 ● 使用异常来处理错误 ● 使用特性(attribute) 下面详细讨论这些特征。
2006-12-03 17:02 | 阅读 781 次 | 评论 0 条

.Net下的AppDomain编程 [摘录]

最近在对AppDomain编程时遇到了一个问题,卸载AppDomain后,在内存中还保留它加载的DLL的数据,所以即使卸载掉AppDomain,还是无法更新它加载的DLL.看来只有关闭整个进程来更新DLL了. -------------------------------------------------------------------------------------------------------------- 我们知道,进程是操作系统用于隔离众多正在运行的应用程序的机制。在.Net之前,每一个应用程序被加载到单独的进程中,并为该进程指定私有的虚拟内存。进程不...
2006-12-03 01:13 | 阅读 882 次 | 评论 0 条

Professional.C.Sharp.2005 读书笔记(1)

第一章 .NET体系 介绍 学习C#不能孤立地学,必需和.NET框架结合起来。因为C#代码只能在.NET框架下运行。这有两个重要原因: 。C#的体系和方法反应的是.NET的根本方法。 。在许多案例中,C#的特色信赖于.NET或.NET的基本类。 因为这种信赖关系,所以在学习C#之前了解.NET框架是非常必要的。 C#和.NET框架的关系 C#是一门新的语言,有两个主要特点。 。它是为.NET而设计的。 。它是一种面向对象语言。 公共语言运行库 .NET的核心是运行库的执行环境,称为公共语言运行库(CLR)或.NET运行库。通常将在CLR的控制下运行的...
2006-12-02 23:17 | 阅读 921 次 | 评论 0 条

vs2005中NotifyIcon控件的使用

为了使用该控件,可执行以下步骤: 1、在窗体上拖放一个NotifyIcon控件 2、设置NotifyIcon的Icon和Text属性,Icon指定状态栏显示的图标,Text用于显示一个ToolTip 3、在窗体中加入如下代码 1 public partial class Form1 : Form 2 { 3 FormWindowState preState; 4 public Form1() 5 { 6 InitializeComponent(); 7 } 8 9 private v...
2006-11-01 00:29 | 阅读 896 次 | 评论 0 条

结C#中得到程序当前工作目录和执行目录的一些方法

1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName获取模块的完整路径。2. System.Environment.CurrentDirectory获取和设置当前目录(该进程从中启动的目录)的完全限定目录。3. System.IO.Directory.GetCurrentDirectory()获取应用程序的当前工作目录。这个不一定是程序从中启动的目录啊,有可能程序放在C:\www里,这个函数有可能返回C:\Documents and Settings\ZYB\,或者C:\Program Files\Ad...
2006-10-31 17:05 | 阅读 678 次 | 评论 0 条

(转)比较IP大小

using System; using System.Net; namespace LoweSoftware.Tools { /// <summary> /// Used to convert and compare IP addresses. /// /// By Alexander Lowe, Lowe*Software. /// http://www.lowesoftware.com /// /// Free for use and modification. No warranty express or /...
2006-08-25 17:07 | 阅读 1081 次 | 评论 0 条

C#中的字符串格式化

Strings There really isn't any formatting within a strong, beyond it's alignment. Alignment works for any argument being printed in a String.Format call. Sample Generates String.Format("->{1,10}<-", "Hello"); -> Hello<- String.Format("->{1,-10}<-", "Hello"); ->Hello <- Number...
2006-08-24 18:49 | 阅读 998 次 | 评论 0 条
浏览92274次