
C#学习
文章平均质量分 72
JOHNCOOLS
这个作者很懒,什么都没留下…
展开
-
[参考]C# 数据类型
简称 .NET类 类型 宽度 范围(位) byte System.Byte 无符号整数 8 -128 到 127 sbyte System.SByte 有符号整数 8 -128 到 127 int System.Int32 有符号整数 32 -2,147,483,648 到 2,147,483,647 uint System.UInt32 无符号整数 32 0 到 4294967295 short转载 2005-12-14 20:48:00 · 1267 阅读 · 0 评论 -
c# ArrayList 的 Sort()方法的使用
http://www.kehui.net/html/article/26/26000.html 今天google了一下 接口 c#, 就看到这篇文章,想起前不久的一道面试题,竟然与之一样。 那天回来vs.net了一下.涉及到一个陌生的IComparer参数,原来这就是一种interface. 我看见网上有人问IComparer接口的使用,于是写了个小例子,和大家一块分享。有不足之处,望不吝指正 1转载 2005-12-14 20:35:00 · 1584 阅读 · 0 评论 -
C#.Net一百零一夜(第一夜)
一千零一夜的童话,使得童年的我,朦胧的开始了解世界,我也希望我的系列能够让初次踏上.Net这片沃土的您,能够有个坚强的臂膀,就如同您在知识海洋中遨游的那片孤舟,您无须知道您从那里出发,也无须知道您将向何而去,您只知道有这么一个日子,知识的彼岸将被您踏在脚下!第一夜: 目的:字符串相等的比较。 陷阱:==运算符与Equal方法s的调用的结果大多情况是相同的,但也只是大多的情况而已。 下面是我通转载 2006-01-24 14:12:00 · 1218 阅读 · 0 评论 -
C#中结构与类的区别
目录类与结构的实例比较 类与结构的差别 如何选择结构还是类 一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight() { //implement something } } 类示例: public class TestTime { int ho转载 2006-03-13 13:11:00 · 856 阅读 · 0 评论 -
封装变化(二)
考虑一个日志记录工具。目前需要提供一个方便的日志API,使得客户可以轻松地完成日志的记录。该日志要求被记录到指定的文本文件中,记录的内容属于字符串类型,其值由客户提供。我们可以非常容易地定义一个日志对象:public class Log{ public void Write(string target, string log) { //实现内容;转载 2006-03-13 13:23:00 · 1063 阅读 · 0 评论 -
[翻译].NET委托:一个C#睡前故事 [推荐]
.NET委托:一个C#睡前故事英文版原作者:Chris Sells(www.sellsbrothers.com)翻译:袁晓辉(www.farproc.com http://blog.youkuaiyun.com/uoyevoli)紧耦合从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷转载 2006-03-13 14:13:00 · 845 阅读 · 0 评论 -
C#基础语法
此为本人学习笔记,最新版本在wiki.deepcast.net中发布。一,注释语句 /**//*注释语句包含在"反斜杠* "和" *反斜杠"中, 或者两个反斜杠和换行符之中, 或者三个反斜杠和换行符之中(可以被VS自动识别为文件注释以提取) 要注意注释中的/,该续行符会把下一行连上来一起注释掉出错。*/ static void Main(string[] args) {//语句块包转载 2006-03-16 11:05:00 · 1102 阅读 · 0 评论 -
SQL存储过程在.NET数据库中的应用
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。总的来说,存储过程具有以下一些优点: ◆存储过程允许标准组件式编程 ◆存储过程能够实现较快的执行速度 ◆存转载 2006-03-16 11:08:00 · 964 阅读 · 0 评论 -
了解正則表達式
摘要相信大家都聽說過正則運算式,用它可以在欄位中進行高速查找、替換等功能。使用正則運算式可以輕鬆的對文本進行控制。比如,如果您想知道一個字串的數位運算式是否在 "0.1"–"9.9" 之間(注意,只有一位小數),您會用什麽方法辦到這個需求呢?我想您會一個 char 一個 char 的檢測,這樣會很麻煩,需要很多代碼。我們這裏有個更簡單更快的解決方案,那就是正則運算式。本文將通過實際示例來體現正則運转载 2006-03-16 12:46:00 · 852 阅读 · 0 评论 -
C#的四个基本技巧
1.如果可能尽量使用接口来编程 .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类。然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更加稳定、可用性会更高。请分析下面的代码: 这个函数从一个可为任何对象的数组中加载ListBox,这段代码被限定为只能使用数组。假想过些时候你发现那些对象存在数据库中,或别的集合中。那么你需要修改程序来使用不同转载 2006-03-16 12:48:00 · 994 阅读 · 0 评论 -
与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow
用Dotnet做开发,不少程序员都在为是用DataSet,DataTable,DataRow(以下简用:DotNet数据对象)作为项目的数据承载对象还是使用自定义的数据类和自定数据集合而犯难,社区中也有相关话题的不少讨论。前者作为Ado.net标准的数据集对象,本身有非常强大的功能,但也存在不少的问题,如:弱类型,非面向对象,数据类对象体积相对较大等。所以不少的设计人员选择了使用了自定义数据类转载 2006-03-13 13:13:00 · 1229 阅读 · 0 评论 -
封装变化(三)
设想这样一个需求,我们需要为自己的框架提供一个负责排序的组件。目前需要实现的是冒泡排序算法和快速排序算法,根据“面向接口编程”的思想,我们可以为这些排序算法提供一个统一的接口ISort,在这个接口中有一个方法Sort(),它能接受一个object数组参数。对数组进行排序后,返回该数组。接口的定义如下: public interface ISort {转载 2006-03-13 13:24:00 · 1080 阅读 · 0 评论 -
C#中编写多线程(1)——起步
for (int i = 0; i Console.WriteLine("Main thread: Do some work."); Thread.Sleep(0); } Console.WriteLine("Main thread: Call Join转载 2006-03-13 14:15:00 · 1039 阅读 · 0 评论 -
C#的多线程(2)——机制探索
注:本文中出现的代码均在.net Framework RC3环境中运行通过 一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及 其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程。什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序 所使用到的内存和系统资源。而一个进程又是由多个线程所组成的,线程是程序中的一转载 2006-03-13 14:23:00 · 1439 阅读 · 0 评论 -
.Net应用程序发布问题的最新解决方案,感觉比较爽(可桌面、程序中加自己的ICO及卸载等)
如果安装有VS2003,请首先下载一个这个(PluginInstaller.msi 27.6 MB): http://www.microsoft.com/downloads/details.aspx?familyid=627921a0-d9e7-43d6-a293-72f9c370bd19&displaylang=en(英文的) 安装好后,再看这两个(中文的): http://supp转载 2006-01-24 14:15:00 · 1851 阅读 · 0 评论 -
C#基础——关于类
类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。类定义了每个对象可以包含什么数据和功能,但类自己不能包含数据。比如一个类代表一个人,它就可以定义所以人相关的信息(身高、年龄、体重等)。使用时,事例化对象表示某一个人。类的成员可以分为两大类类本身所声明的以及从基类中继承而来的类的成员有以下类型转载 2006-03-16 12:47:00 · 856 阅读 · 0 评论 -
压缩与解压缩 ZipHelper
我在AgileIM的开发中解决视频/音频会话功能时,发现传输的音/视频数据量太大,通过一些格式转换(如BMP->JPG、或 帧间预测编码)可以适当减少带宽的需求,但是仍然不能满足需求,于是我想到了数据压缩,经过我测试、普通的音/视频数据经压缩后可以只有原来的一半大小,基本可以满足需要了。压缩/解压功能我借助了ICSharpCode.SharpZipLib 类库,为了更方便易用,我封装了ZipHel转载 2006-03-13 13:18:00 · 1093 阅读 · 0 评论 -
数据结构课程设计-----用C#实现双向链表
学校要我们做数据结构的课程设计线性表的应用——仓库管理和图的应用——工程工期控制问题.一向以来编这些算法程序都是用C或C++语言来写的,这次我决定做一个新尝试用C#来编这两个算法,并配以图形界面来显示效果.下面是我写的双向链表类.using System;using System.Collections.Generic;using System.Text;namespace LJH.ListN转载 2006-03-16 11:21:00 · 1711 阅读 · 0 评论 -
封装变化(一)
软件设计最大的敌人,就是应付需求不断的变化。变化有时候是无穷尽的,于是项目开发就在反复的修改、更新中无限期地延迟交付的日期。变化如悬在头顶的达摩克斯之剑,令许多软件工程专家一筹莫展。正如无法找到解决软件开发的“银弹”,要彻底将变化扼杀在摇篮之中,看来也是不可能完成的任务。那么,积极地面对“变化”,方才是可取的态度。于是,极限编程(XP)的倡导者与布道者Kent Beck提出要“拥抱变化”,从软转载 2006-03-13 13:21:00 · 1162 阅读 · 0 评论 -
C#.Net网络程序开发-Socket篇
C#.Net网络程序开发-Socket篇转载 2006-03-15 11:03:00 · 881 阅读 · 0 评论 -
用Split函数分隔字符串
using System.Text.RegularExpressions; //不要这个1、用字符串分隔:string str="aaajsbbbjsccc";string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);foreach (string i in sArray) Console.Write(i.ToString(转载 2006-03-15 13:28:00 · 2637 阅读 · 0 评论 -
为数据访问层编写一个基类
编写数据访问层代码时,总要一边又一边的重复编写:读数据库连接字符串,建立数据库连接对象,打开连接,创建Command对象,创建数据适配器,创建数据集,填充数据集,关闭连接。这种重复的代码写一两次到还行,写多了就免不了有一些烦了。 在总结以前的的代码以后,决定重构数据方法层的代码。数据访问层无非进行两种操作:查询返回DataTable,进行插入、更新、删除等无返回值的操作。只要增加一个数据访问层转载 2006-03-16 11:38:00 · 1080 阅读 · 0 评论 -
C#中 const 和 readonly 的区别
const 和 readonly 的区别,总是不太清楚,于是查了查资料。 const 的概念就是一个包含不能修改的值的变量。常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的。 readonly 允许把一个字段设置成常量,但可以执行一些运算转载 2006-03-16 12:57:00 · 759 阅读 · 0 评论 -
.NET(C#)连接各类数据库-集锦
1.C#连接连接Access程序代码: -------------------------------------------------------------------------------using System.Data;using System.Data.OleDb;..string strConnection="Provider=Microsoft.Jet.OleDb.4.转载 2006-02-13 10:57:00 · 1098 阅读 · 0 评论 -
C#.NET中的类型转换
C# 出来也有些日子了,最近由于编程的需要,对 C# 的类型转换做了一些研究,其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之间的转换、字符串和字符数组/字节数组之间的转换、各种数值类型和字节数组之间的转换、十六进制数输出以及日期型数据的一些转换处理,在这里与大家分享—— 1. 装箱、拆箱还是别名许多 C#.NET 的书转载 2006-03-17 17:35:00 · 1319 阅读 · 0 评论 -
读写文件之日志文件
我们在写软件的时候,经常要记录一些登陆信息、删除信息之类,便于日后查询。我简单写了一个针对日志文件的类,可以通过此类可以自定义日志文件名称,当日志达到规定大小时,自动备份,路径可以自行定义具体如下:命名空间:using System;using System.Web;using System.IO;using System.Text;具体实现:public class LogFile { pro转载 2006-03-18 10:45:00 · 1053 阅读 · 0 评论 -
解决SqlTransaction用尽的问题(SQL处理超时)
有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。原访问数据库的代码为: 1SqlConnection conn = new SqlConnection(strConn); 2conn.Open(); 3SqlTransaction trans = conn.BeginTransaction(); 4try 5{ 6 CEngine.Exe转载 2006-02-19 14:00:00 · 1964 阅读 · 0 评论 -
C#学习笔记(一):类
C#使用关键字class来定义类。其基本结构如下: class myclass { //class members }定义这样一个类后,就可以在能访问该定义的工程的其他地方对该类进行实例化。 默认情况下,类声明为内部的,即只有当前工程中的代码才能访问它。 可以用internal访问修饰符关键字显式指定,但这不是必须的,类在定义时默认为此类型的转载 2006-02-19 14:26:00 · 962 阅读 · 0 评论 -
C#学习笔记(八):集合
数组最大的限制就是一旦创建好数组,它们的大小就是固定的,不能在现有的数组末尾添加新项目,除非创建一个新的数组。C#中的数组是作为System.Array类的实例来执行的,它们只是集合类中的一种。集合类一般用于处理对象列表,其功能要比简单数组要多,这些功能是通过执行System.Collections名称空间中的接口而实现的,因此集合的语法已经标准化了。在System.Collectio转载 2006-02-19 14:30:00 · 1144 阅读 · 0 评论 -
C#学习笔记(十):阴影和深度复制
从一个变量到另一个变量按值复制对象,而不是按引用复制对象(即以与结构相同的方式复制)可能非常复杂。因为一个对象可能包含许多对象的引用,例如字段、成员等,这将涉及许多烦人的处理操作。把每个成员从一个对象复制到另一个对象中可能不会成功,因为其中一些成员可能是引用类型。按照成员复制简单的对象可以通过派生于System.Object的MemberwiseClone()方法来完成,这是一个受保护的方转载 2006-02-19 14:31:00 · 1079 阅读 · 0 评论 -
C#学习笔记(十一):事件基础
事件类似于异常,因为它们都由对象引发。但是它们也有几个重要的区别:其中最重要的区别就是没有处理异常中try...catch类似的结构来处理事件,而是必须订阅它们。订阅一个事件的含义是提供代码,在事件发生时执行这些代码,它们称为事件处理程序。事件处理程序本身都是简单的函数。对事件处理函数的唯一限制是它必须匹配于事件所要求的签名(返回类型和参数)。这个签名是事件定义的一部分,由一个委托指定。转载 2006-02-19 14:32:00 · 1695 阅读 · 0 评论 -
有趣的多线程编程(4)——死锁
// DeadLockSample.cs// 分析一下为什么会发生死锁?using System;using System.Threading;public class Test{ static readonly object firstLock = new object(); static readonly object secondLock = ne转载 2006-02-19 12:58:00 · 842 阅读 · 0 评论 -
C#中XML的基本应用
在学习之前,我们通过一个Hello World的例子检查自己的机器是否已经MSXML3。 第一步:建立要输入XML文档hello.xml。xml version="1.0" encoding=" GB2312"?>greeting>Hello, world!greeting> xml version="1.0" encoding=" GB2312"?>xsl:styles转载 2006-02-19 14:05:00 · 1634 阅读 · 0 评论 -
C#学习笔记(三):抽象类和接口
抽象类和接口的相似处:抽象类和接口都包含可以由派生类继承的成员。接口和抽象类都不能直接实例化,但可以声明它们的变量。如果这样做,就可以使用多态性把继承这两种类型的对象指定给它们的变量。接着通过这些变量来使用这些类型的成员,但不能直接访问派生对象的其它成员。 抽象类和接口的区别:派生类只能继承一个基类,即只能直接继承一个抽象类(但可以用一个继承链包含多个抽象类)。相反,类可以使用转载 2006-02-19 14:27:00 · 1214 阅读 · 0 评论 -
C#学习笔记(六):类成员的其他议题
一、隐藏基类的方法当从基类继承一个(非抽象的)成员时,也就继承了其执行代码。如果继承的成员是虚拟的virtual,就可以用override关键字重写(重载)这段代码。无论继承的成员是否是虚拟的,我们都可以隐藏这些执行代码。例如: public class MyBaseClass { public void DoSomething()转载 2006-02-19 14:29:00 · 1073 阅读 · 0 评论 -
C#学习笔记(九):运算符重载
首先看看运算符重载的基本语法。要重载运算符,可以给类添加运算符类型成员(它们必须是static)。我们先看一个简单的类: public class AddClass1 { public int val; }这仅是int值的一个包装器(wrapper),但可以用于说明规则。对于这个类下面的代码不能编译:转载 2006-02-19 14:31:00 · 921 阅读 · 0 评论 -
危险字符过滤的类
using System;using System.IO;using System.Text;using System.Text.RegularExpressions;using System.Runtime.Remoting;using System.Runtime.Remoting.Proxies;using System.Runtime.Remoting.Messaging;using Sy转载 2006-03-28 11:53:00 · 995 阅读 · 0 评论 -
有趣的多线程编程(1)——一个简单的例子
//HelloWordThread.cs//------------------------using System;using System.Threading;public class Test{ static void Main() { ThreadStart job = new ThreadStart(ThreadJob);转载 2006-02-19 12:51:00 · 1106 阅读 · 0 评论 -
有趣的多线程编程(2)——线程中的参数传递
使用类、类的方法或类的属性都可以向线程传递参数:public class UrlDownloader{ string url; public UrlDownloader (string url) { this.url = url; } public void Download() { Web转载 2006-02-19 12:53:00 · 968 阅读 · 0 评论 -
有趣的多线程编程(3)——线程内部是如何进行的?
看一下以下两个例子的运行结果://TestThread.csusing System;using System.Threading;public class Test{ static int count=0; static void Main() { ThreadStart job = new ThreadStart(转载 2006-02-19 12:57:00 · 844 阅读 · 0 评论