代码改变世界

随笔分类 -  C# 1.0

C#中的多态性

2006-09-06 14:31 by 努力学习的小熊, 12406 阅读, 收藏, 编辑
摘要: C#中的多态性 首先理解一下什么叫多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。 多态性通过派生类覆写基类中的虚函数型方法来实现。 多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。 编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。 运行时的多态性:运行时的多态... 阅读全文

定义自定义的异常

2006-06-15 13:41 by 努力学习的小熊, 4110 阅读, 收藏, 编辑
摘要: 首先我们建立自己的异常类CustomException,它要继承自ApplicationException类(这是一个在发生非致命的应用程序错误时抛出的通用异常,它又继承于更为通用的Exception类),将其用作为应用程序定义的任何自定义异常的基类。通过这个基类,我们就可以编写一个通用的catch代码块,捕获应用程序定义的任何自定义异常类型。 自定义的异常类型可以在这中间扮演一个非常重要的角色。... 阅读全文

使用线程,防止当前程序被阻塞

2006-04-14 10:40 by 努力学习的小熊, 1468 阅读, 收藏, 编辑
摘要: 在编写Windows Form程序时有时需要编写一个处理大事件的函数,这导致了程序的运行时间变得很长,这时问题就出现了,当程序没有处理完毕之前当前窗体被锁死了,而且用户如果此时点击窗体的其他部分,便会出现没有响应的标识,这时用户就会以为程序死了,而去关闭程序,如果我们没有对这种操作作相应的处理,很容易导致数据出现错误。这时我们可以采用另开一个线程的方法来处理时间比较长的程序,这样当前窗体就不会被锁... 阅读全文

C#学习笔记(二十三):串行化和并行化

2006-04-07 16:55 by 努力学习的小熊, 3889 阅读, 收藏, 编辑
摘要: System.SerializableAttribute 串行化是指存储和获取磁盘文件、内存或其他地方中的对象。在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原实例区别开来。 只需给类添加Serializable属性,就可以实现串行化实例的成员。 并行化是串行化的逆过程,数据从存储介质中读取出来,并赋给类的实例变量。 例: 1 [Seria... 阅读全文

C#学习笔记(二十二):使用文件高级

2006-04-05 11:35 by 努力学习的小熊, 1291 阅读, 收藏, 编辑
摘要: 监控文件结构: 这里使用的FileSystemWatcher类,可以对文件系统事件做出响应。 使用这个类前必须设置的属性 属性 说明 ... 阅读全文

C#学习笔记(二十一):使用文件基础

2006-03-29 14:50 by 努力学习的小熊, 2656 阅读, 收藏, 编辑
摘要: 在System.IO名称空间中包含了用于文件输入输出的主要类。 File:实用类,提供许多静态方法,用于移动、复制和删除文件。 Directory:实用类,提供许多静态方法,用于移动、复制和删除目录。 Path:实用类,用于处理路径名称。 FileInfo:表示磁盘上的物理文件,具有可以处理此文件的方法。要完成对文件的读取和写入工作,就必须创建Stream对象。 DirectoryInfo:表示磁... 阅读全文

C#学习笔记(二十):Windows应用程序安装部署概念

2006-03-22 13:53 by 努力学习的小熊, 4270 阅读, 收藏, 编辑
摘要: 规划安转内容: 1.应用程序需要什么文件:可执行文件和一些组件装配件。无需标识这些项之间的依赖关系,因为这种依赖关系会自动包括。或许还需要其他一些文件。如:文档文件,readme.txt,许可文件,文档模板,图像,配置文件等。必须了解确定所有需要的文件。 2.应该使用什么目录:应用程序文件应该安装在Program Files\Application Name中。Program Files目录的命名... 阅读全文

C#学习笔记(十九):图形绘制进阶-图像(双倍缓冲)

2006-03-22 08:42 by 努力学习的小熊, 3398 阅读, 收藏, 编辑
摘要: 图像在GDI+中有很多用途。当然,可以在窗口中绘制图像,也可以用图像创建画笔(TextureBrush),再绘制用该图像填充的图形。 Image类在System.Drawing命名空间中。 图像另一个非常重要的用途是双倍缓冲的图形编程技巧。有时要创建的图形非常精细复杂,即使使用目前运行速度最快的机器,也需要很长时间才能绘制出来。观察图像在屏幕中一点一点地绘制出来,并不是一件令人愉快的事。这类应用程... 阅读全文

C#学习笔记(十八):图形绘制进阶-线条、字体

2006-03-21 11:48 by 努力学习的小熊, 3998 阅读, 收藏, 编辑
摘要: 使用Pen类绘制线条 Pen类在System.Drawing名称空间中。 例如,如下代码即可在Form窗体加载调用绘图方法时绘制一些直线 protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; using (Pen blackPen = new ... 阅读全文

C#学习笔记(十七):图形绘制基础

2006-03-13 15:15 by 努力学习的小熊, 4597 阅读, 收藏, 编辑
摘要: 在Windows的用户界面中,当创建一个窗口,并在该窗口进行绘图时,一般要声明一个派生于System.Windows.Forms.Form的类。如果要编写一个定制控件,就要声明一个派生于System.Windows.Forms.UserControl的类。在这两种情况下,都重写了虚拟函数OnPaint()。只要窗口的任何一部分需要重新绘制,Windows都会调用这个函数。 在这个事件中,Paint... 阅读全文

C#学习笔记(十六):使用打开保存文件对话框

2006-03-09 09:21 by 努力学习的小熊, 23195 阅读, 收藏, 编辑
摘要: 除了PrintPreviewDialog外,其他对话框类都派生于抽象基类CommonDialog,这个基类的方法可以管理Windows通用对话框。 对话框适用的场合: 1.要让用户选择和浏览要打开的文件,应使用OpenFileDialog。这个对话框可以配置为只允许选择一个文件,或可以选择多个文件。 2.使用SaveFileDialog,用户可以为要保存的文件指定一个文件名和浏览的路... 阅读全文

C#学习笔记(十五):自定义控件

2006-02-27 11:32 by 努力学习的小熊, 1676 阅读, 收藏, 编辑
摘要: 利用VS.NET提供的Windows Control Library类型工程,可以创建定义自己的控件。 可以开发两种不同类型的自定义控件:用户控件(或组合控件)和定制控件。 用户或组合控件:这种控件是根据现有的控件的功能创建一个新控件。这类控件一般用于把控件的用户界面和功能封装在一起,或者把几个其他控件组合在一起,改善控件的界面。 定制控件:当没有控件可以满足要求时,就创建这类控件,即从头开始创建... 阅读全文

C#学习笔记(十四):StatusBar控件

2006-02-21 13:31 by 努力学习的小熊, 5495 阅读, 收藏, 编辑
摘要: 状态栏控件StatusBar StatusBar的一些常用属性: 名称 可用性 描述 BackgroundImage 读写 可以给状态栏赋予一个图像,显示在背景上。 Panels 只读 这是状态栏上的面板集合。使用这个集合可以添加和删除面板 ShowPanels 读写 如果要显示面板,这个属性必须设置为true Text 读写 如果不使用面板,这个属... 阅读全文

C#学习笔记(十三):读写Txt文件

2006-02-17 11:13 by 努力学习的小熊, 4911 阅读, 收藏, 编辑
摘要: .NET内置了两个基本控件来提取用户输入的文本:TextBox和RichTextBox。这两个控件都派生于基类TextBoxBase,而TextBoxBase派生于Control。 TextBoxBase提供了在文本框中处理文本的基本功能,例如选择文本、剪切和从剪切板上粘贴,以及许多事件。 利用TextBox的Validating事件,将同类型输入验证进行代码归类,减少重复代码的编写。例如:姓名和... 阅读全文

C#学习笔记(十二):事件进阶

2006-02-06 15:39 by 努力学习的小熊, 1333 阅读, 收藏, 编辑
摘要: 多用途的事件处理程序 在上一篇中,Timer.Elapsed事件的签名包含了时间处理程序常见的两个参数: 1.object source——引发事件的对象的引用 2.ElapsedEventArgs e——由事件传送的参数 在这个事件中使用object类型参数的原因是,我们常常要为由不同对象引发的几个相同事件使用同一事件处理程序,但仍要指定哪个对象引发了事件。 我们在调用处理事件的函数时,发送... 阅读全文

C#学习笔记(十一):事件基础

2006-02-05 16:34 by 努力学习的小熊, 1432 阅读, 收藏, 编辑
摘要: 事件类似于异常,因为它们都由对象引发。但是它们也有几个重要的区别:其中最重要的区别就是没有处理异常中try...catch类似的结构来处理事件,而是必须订阅它们。订阅一个事件的含义是提供代码,在事件发生时执行这些代码,它们称为事件处理程序。 事件处理程序本身都是简单的函数。对事件处理函数的唯一限制是它必须匹配于事件所要求的签名(返回类型和参数)。这个签名是事件定义的一部分,由一个委托指定。 处理过... 阅读全文

C#学习笔记(十):阴影和深度复制

2006-01-23 14:05 by 努力学习的小熊, 2579 阅读, 收藏, 编辑
摘要: 从一个变量到另一个变量按值复制对象,而不是按引用复制对象(即以与结构相同的方式复制)可能非常复杂。因为一个对象可能包含许多对象的引用,例如字段、成员等,这将涉及许多烦人的处理操作。把每个成员从一个对象复制到另一个对象中可能不会成功,因为其中一些成员可能是引用类型。 按照成员复制简单的对象可以通过派生于System.Object的MemberwiseClone()方法来完成,这是一个受保护的方法,但... 阅读全文

C#学习笔记(九):运算符重载

2006-01-18 22:58 by 努力学习的小熊, 2922 阅读, 收藏, 编辑
摘要: 首先看看运算符重载的基本语法。 要重载运算符,可以给类添加运算符类型成员(它们必须是static)。 我们先看一个简单的类: public class AddClass1 { public int val; } 这仅是int值的一个包装器(wrapper),但可以用于说明规则。 对于这个类下面的代码不能编译: AddCla... 阅读全文

C#与SQL Server之间的数据类型对比及在VS2003中空值传递的解决办法

2006-01-17 17:00 by 努力学习的小熊, 1407 阅读, 收藏, 编辑
摘要: 这是我在开发多层体系结构时遇到的问题,由于VS.NET尚不支持各种数据类型的空值即null,放入实体类中在各个层之间作为参数传递,所以经查询参考SQL Server 2000的联机丛书和.NET的MSDN Library以及在编写代码生成时结合CodeSmith的数据类型,总结找出如下的类型对照解决方案,将其放在一个公用类或公用方法工程的类中使用即可,遇到各种数据类型的空值即可这样进行处理。 ... 阅读全文

C#学习笔记(八):集合

2006-01-16 10:54 by 努力学习的小熊, 1540 阅读, 收藏, 编辑
摘要: 数组最大的限制就是一旦创建好数组,它们的大小就是固定的,不能在现有的数组末尾添加新项目,除非创建一个新的数组。 C#中的数组是作为System.Array类的实例来执行的,它们只是集合类中的一种。集合类一般用于处理对象列表,其功能要比简单数组要多,这些功能是通过执行System.Collections名称空间中的接口而实现的,因此集合的语法已经标准化了。 在System.Collections名称... 阅读全文