
C#相关
文章平均质量分 78
幸运的意外
幽默风趣
展开
-
c#线程间通信
c#线程间通信2008-11-08 12:19using System;using System.Text;using System.Threading;namespace ThreadTest{ class Program { static void Main(string[] args) {转载 2009-01-15 14:13:00 · 881 阅读 · 0 评论 -
Effective C# 原则15:使用using和try/finally来做资源清理
使用非托管资源的类型必须实现IDisposable接口的Dispose()方法来精确的释放系统资源。.Net环境的这一规则使得释放资源代码的职责是类型的使用者,而不是类型或系统。因此,任何时候你在使用一个有Dispose()方法的类型时,你就有责任来调用Dispose()方法来释放资源。最好的方法来保证Dispose()被调用的结构是使用using语句或者try/finally块。所有包含非托转载 2009-05-06 13:54:00 · 538 阅读 · 0 评论 -
Effective C# 原则17:装箱和拆箱的最小化
Effective C# 原则17:装箱和拆箱的最小化Item 17: Minimize Boxing and Unboxing 值类型是数据的容器,它们不具备多太性。另一方面就是说,.Net框架被设计成单一继承的引用类型,System.Object,在整个继承关系中做为根对象存在。设计这两种类型的目的是截然不同的,.Net框架使用了装箱与拆箱来链接两种不同类型的数据。装箱是把一个值类型数据放转载 2009-05-06 14:03:00 · 636 阅读 · 0 评论 -
Effective C# 原则11:选择foreach循环
Effective C# 原则11:选择foreach循环Item 11: Prefer foreach Loops C#的foreach语句是从do,while,或者for循环语句变化而来的,它相对要好一些,它可以为你的任何集合产生最好的迭代代码。它的定义依懒于.Net框架里的集合接口,并且编译器会为实际的集合生成最好的代码。当你在集合上做迭代时,可用使用foreach来取代其它的循环结构。转载 2009-05-06 13:28:00 · 686 阅读 · 0 评论 -
Effective C# 原则12:选择变量初始化而不是赋值语句
Effective C# 原则12:选择变量初始化而不是赋值语句Item 12: Prefer Variable Initializers to Assignment Statements (译注:根据我个人对文章的理解,我把initializer译为:初始化器,它是指初始化语法,也就是在一个类里声明变量的同时,直接创建实例值的方法。例:object m_o = new object();如果转载 2009-05-06 13:36:00 · 896 阅读 · 0 评论 -
Effective C# 原则13:用静态构造函数初始化类的静态成员
Effective C# 原则13:用静态构造函数初始化类的静态成员Item 13: Initialize Static Class Members with Static Constructors (译注:initializer在上文中译为了“初始化器”,实在不好听,本文中全部改译为:“预置方法”)你应该知道,在一个类型的任何实例初始化以前,你应该初始化它的静态成员变量。在里C#你可以使用静态的转载 2009-05-06 13:37:00 · 524 阅读 · 0 评论 -
Effective C# 原则16:垃圾最小化
Effective C# 原则16:垃圾最小化Item 16: Minimize Garbage 垃圾回收器对内存管理表现的非常出色,并且它以非常高效的方法移除不再使用的对象。但不管你怎样看它,申请和释放一个基于堆内存的对象总比申请和释放一个不基于堆内存的对象要花上更多的处理器时间。你可以给出一些严重的性能问题,例如应用程序在某个方法内分配过量的引用对象。你不应该让垃圾回收器超负荷的工作,转载 2009-05-06 14:03:00 · 476 阅读 · 0 评论 -
Effective C# - 条款18:实现标准的Dispose模式
我们已经讨论过,处理一个占用了非托管资源对象是很重要的。现在是时候来讨论如何写代码来管理这些类占用的非内存资源了。一个标准的模式就是利用.Net框架提供的方法处理非内存资源。你的用户也希望你遵守这个标准的模式。也就是通过实现IDisposable接口来释放非托管的资源,当然是在用户记得调用它的时候,但如果用户忘记了,析构函数也会被动的执行。它是和垃圾回收器一起工作的,确保在一些必要时候,你的对象只转载 2009-05-06 14:10:00 · 980 阅读 · 0 评论 -
Effective C# 原则19:选择定义和实现接口,而不是继承
Effective C# 原则19:选择定义和实现接口,而不是继承Item 19: Prefer Defining and Implementing Interfaces to Inheritance抽象类在类的继承中提供了一个常规的“祖先”。一个接口描述了一个可以被其它类型实现的原子级泛型功能。各有千秋,却也不尽相同。接口是一种合约式设计:一个类型实现了某个接口的类型,就必须实现某些期望转载 2009-05-06 14:13:00 · 674 阅读 · 0 评论 -
Effective C# 原则20:明辨接口实现和虚函数重载的区别
Effective C# 原则20:明辨接口实现和虚函数重载的区别Item 20: Distinguish Between Implementing Interfaces and Overriding Virtual Functions 粗略的看一下,感觉实现接口和虚函数重载是一样的。你定义了一些对象,但是这些对象是在另一个类型里申明的。你被第一感觉骗了,实现接口与虚函数重载是完全不同的。在接转载 2009-05-06 14:14:00 · 620 阅读 · 0 评论 -
Effective C# 原则24:选择申明式编程而不是命令式编程
与命令式编程相比,申明式编程可以用更简单,更清楚的方法来描述软件的行为。申明式编程就是说用申明来定义程序的行为,而不是写一些指令。在C#里,也和其它大多数语言一样,你的大多数程序都是命令式的:在程序中写一个方法来定义行为。在C#中,你在编程时使用特性就是申明式编程。你添加一个特性到类,属性,数据成员,或者是方法上,然后.Net运行时就会为你添加一些行为。这样申明的目的就是简单易用,而且易于阅读和维转载 2009-06-02 13:24:00 · 400 阅读 · 0 评论 -
Effective C# 原则21:用委托来表示回调
我:“儿子,到院子里除草去,我要看会书。” 斯科特:“爸,我已经打扫过院子了。” 斯科特:“爸,我已经把草放在除草机上了。” 斯科特:“爸,除草机不能启动了。” 我:“让我来启动它。” 斯科特:“爸,我做好了。” 这个简单的交互展示了回调。我给了我儿子一个任务,并且他可以报告状态来(重复的)打断我。而当我在等待他完成任务的每一个部份时,我不用阻塞我自己的进程。他转载 2009-06-02 13:09:00 · 486 阅读 · 0 评论 -
Effective C# 原则22:用事件定义对外接口
可以用事件给你的类型定义一些外部接口。事件是基于委托的,因为委托可以提供类型安全的函数签名到事件句柄上。加上大多数委托的例子都是使用事件来说明的,以至于开发人员一开始都认为委托与事件是一回事。在原则21里,我已经展示了一些不在事件上使用委托的例子。在你的类型与其它多个客户进行通信时,为了完成它们的行为,你必须引发事件。一个简单的例子,你正在做一个日志类,就像一个信息发布机一样在应用程序里发布所转载 2009-06-02 13:16:00 · 444 阅读 · 0 评论 -
Effective C# 原则23:避免返回内部类对象的引用
你已经知道,所谓的只读属性就是指调用者无法修改这个属性。不幸运的是,这并不是一直有效的。如果你创建了一个属性,它返回一个引用类型,那么调用者就可以访问这个对象的公共成员,也包括修改这些属性的状态。例如:public class MyBusinessObject{ // Read Only property providing access to a // private data memb转载 2009-06-02 13:17:00 · 520 阅读 · 0 评论 -
Effective C# 原则25: 让你的类型支持序列化
对象的持久是类型的一个核心功能。这是一个在你忽略对它的支持以前,没有人会注意到的基本元素之一。 如果你的类型不能恰当的支持序列化,那么对于把你类的做为基类或者成员的开发人员来说,你会给他们增加很多的工作量。当你的类型不支持序列化时,他们不得不围绕这工作,自己添加实现这个标准的功能。而对于不能访问类的私有成员的开发人来说,恰当的实现你的类型的序列化是不太可能的。如果你的类型不支持序列化,那么对于你的转载 2009-06-02 13:36:00 · 620 阅读 · 0 评论 -
xml处理的一个常用类
using System;using System.IO;using System.Xml;using System.Xml.XPath;using System.Windows.Forms;namespace XmlProcess{ /// /// XML文件操作 /// public sealed class XmlProcess { #region 私有变量 /// ///原创 2010-03-01 16:06:00 · 676 阅读 · 0 评论 -
Effective C# 原则14:使用构造函数链
Effective C# 原则14:使用构造函数链Item 14: Utilize Constructor Chaining 写构造函数是一个反复的工作。很多开发人员都是先写一个构造函数,然后复制粘贴到其它的构造函数里,以此来满足类的一些重载接口。希望你不是这样做的,如果是的,就此停止吧。有经验的C++程序可能会用一个辅助的私有方法,把常用的算法放在里面来构造对象。也请停止吧。当你发现多重构造转载 2009-05-06 13:45:00 · 904 阅读 · 1 评论 -
Effective C# 原则8:确保0对于值类型数据是有效的
Effective C# 原则8:确保0对于值类型数据是有效的.Net系统默认所有的对象初始化时都为0。这并没有提供一个方法来预防其他程序员创建的值类型数据的实例在初始化是都是0。请让你的数据类型默认值也是0。一个特殊情况是在枚举类型数据中。决不要创建一个不包括0在内的枚举类型。所有的枚举类型都是从System.ValueType派生的。枚举类型的值是从0开始的,但你可以改变这一行为:pu转载 2009-05-04 09:11:00 · 453 阅读 · 0 评论 -
Effective C# 原则3:选择is或者as操作符而不是做强制类型转换
C#是一个强数据类型语言。好的编程实践意味着当可以避免从一种数据类型强制转化为另种数据类型时,我们应该尽我们的所能来避免它。但在某些时候,运行时类型检测是不可避免的。在C#里,大多数时候你要为调用函数的参数使用System.Object类型,因为Framwork已经为我们定义了函数的原型。你很可能要试图把那些类型进行向下转化为其它类型的接口或者类。你有两个选择:用as运算符,或者,采用旧式的C风格转载 2009-05-03 09:09:00 · 491 阅读 · 0 评论 -
SQL存储图片的方法
SQL存储图片的方法2008-11-07 08:04//将SQL server2000中保存的图像显示在Picture中 private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e) { byte[] buffByte = null; string comm = @"selec转载 2009-01-15 13:05:00 · 1334 阅读 · 0 评论 -
深入浅出C#消息
深入浅出C#消息 深入浅出C#消息 深入浅出C#消息 本文来自于《电脑编程技巧与维护》2002年7期。 一、消息概述 Windows下应用程序的执行是通过消息驱动的。消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理。 1 什么是消息(Message) 消息就是通知和命令。在.NET框架类库中的System.Windows.Forms命转载 2009-01-13 16:29:00 · 1071 阅读 · 0 评论 -
ASP页面传递参数比较
一、使用QuerystringQuerystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:1、创建一个web form2、在新建的web form中放置一个button1,在放置两个TextBox1,Tex转载 2009-02-09 10:48:00 · 1038 阅读 · 0 评论 -
C#读取excel数据到SQL server
using System;using System.Data;using System.Windows.Forms;using System.Data.OleDb;namespace WindowsApplication2{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } p转载 2009-04-27 10:03:00 · 765 阅读 · 0 评论 -
无标题栏窗体移动
没有标题栏的窗体一般是不能按住鼠标左键进行拖动的,但是通过API函数或是消息重定向就可以实现了。介绍两个方法,一个是发送SC_Move消息,一个是改变鼠标区域消息方法一:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using转载 2009-04-27 09:10:00 · 438 阅读 · 0 评论 -
C#实例类序列化
c#.net实体类序列化方法 (zhuan)2008-12-06 20:49 提到为了传递数据,需要把作为载体的实体类序列化,好好的找了一些序列化方面的介绍。感觉下面的这个介绍比较容易介绍! 1.什么是序列化 序列化是将对象状态转换为可保持或传输的格式的过程,在序列化过程中,对象的公共字段和私有字段以及类的名称(包括包含该类的程序集)都被转换为字节流,然后写入数据转载 2009-05-03 07:38:00 · 1071 阅读 · 0 评论 -
Effective C# 原则2:为你的常量选择readonly而不是const
对于常量,C#里有两个不同的版本:运行时常量和编译时常量。因为他们有不同的表现行为,所以当你使用不当时,将会损伤程序性能或者出现错误。两害相权取其轻,当我们不得不选择一个的时候,我们宁可选择一个运行慢一点但正确的那一个,而不是运行快一点但有错误的那个。基于这个理由,你应该选择运行时常量而不是编译时常量(译注:这里隐藏的说明了编译时常量效率更高,但可能会有错误)。编译时常量更快更直接,但在可维护性上转载 2009-05-03 09:06:00 · 460 阅读 · 0 评论 -
Effective C# 原则4:用条件属性而不是#if预编译块
使用#if/#endif 块可以在同样源码上生成不同的编译(结果),大多数debug和release两个版本。但它们决不是我们喜欢用的工具。由于#if/#endif很容易被滥用,使得编写的代码难于理解且更难于调试。程序语言设计者有责任提供更好的工具,用于生成在不同运行环境下的机器代码。C#就提供了条件属性(Conditional attribute)来识别哪些方法可以根据环境设置来判断是否应该被调转载 2009-05-03 09:27:00 · 648 阅读 · 0 评论 -
Effective C# 原则5:始终提供ToString()
Effective C# 原则5:始终提供ToString()(部分翻译)Always Provide ToString()在.Net世界里,用得最多的方法之一就是System.Object.ToStrying()了。你应该为你所有的客户写一个“通情达理”的类(译注:这里是指这个类应该对用户友好)。要么,你就迫使所用类的用户,去使用类的属性并添加一些合理的易读的说明。这个以字符串形式存在,关于转载 2009-05-03 09:31:00 · 468 阅读 · 0 评论 -
Effective C# 原则9:明白几个相等运算之间的关系
Effective C# 原则9:明白几个相等运算之间的关系明白ReferenceEquals(), static Equals(), instance Equals(), 和运算行符==之间的关系。当你创建你自己的类型时(不管是类还是结构),你要定义类型在什么情况下是相等的。C#提供了4个不同的方法来断定两个对象是否是相等的:public static bool ReferenceE转载 2009-05-04 09:13:00 · 476 阅读 · 0 评论 -
Effective C# 原则7: 选择恒定的原子值类型数据
Effective C# 原则7: 选择恒定的原子值类型数据恒定类型(immutable types)其实很简单,就是一但它们被创建,它们(的值)就是固定的。如果你验证一些准备用于创建一个对象的参数,你知道它在验证状态从前面的观点上看。你不能修改一个对象的内部状态使之成为无效的。在一个对象被创建后,你必须自己小心翼翼的保护对象,否则你不得不做错误验证来禁止改变任何状态。恒定类型天生就具有线程完转载 2009-05-04 09:09:00 · 574 阅读 · 0 评论 -
Effective C# 原则6:区别值类型数据和引用类型数据
Effective C# 原则6:区别值类型数据和引用类型数据 值类型数据还是引用类型数据?结构还是类?什么你须要使用它们呢?这不是C++,你可以把所有类型都定义为值类型,并为它们做一个引用。这也不是Java,所有的类型都是值类型。你在创建每个类型实例时,你必须决定它们以什么样的形式存在。这是一个为了取得正确结果,必须在一开始就要面对的重要决定。(一但做也决定)你就必须一直面对这个决定给你带转载 2009-05-04 09:07:00 · 404 阅读 · 0 评论 -
Effective C# 原则10: 明白GetHashCode()的缺陷
Effective C# 原则10: 明白GetHashCode()的缺陷这是本书中唯一一个被一整个函数占用的原则,你应该避免写这样的函数。GetHashCode()仅在一种情况下使用:那就是对象被用于基于散列的集合的关键词,如经典的HashTable或者Dictionary容器。这很不错,由于在基类上实现的GetHashCode()存在大量的问题。对于引用类型,它可以工作,但高效不高;对于值类型转载 2009-05-04 09:14:00 · 627 阅读 · 0 评论 -
C#尽可能允许把类序列化
持久化(persistence)是类型的一个核心特性。这种特性往往是在我们忽略支持它们的时候,才会被注意到。如果我们的类型没有正确地支持序列化(serialization),那么其他开发人员在使用我们的类型作为成员或者基类的时候将有许多工作要做。他们必须自己实现这样的标准特性。如果不访问类型的私有实现细节,要想为类型正确实现序列化几乎是不可能的。如果我们自己不支持序列化,让类的用户来添加序列化支持转载 2009-05-03 08:36:00 · 880 阅读 · 0 评论 -
Effective C# 原则1
Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)。我们的目标:尽可能编写出运行效率更高,更健壮,更容易维护的C#代码。原则一:尽可能的使用属性(property),而不是数据成员(field)。出于以下几点原因,请在设计类时,尽可能的使用属性,而不是成员。1、.Net对属性的支持远远大于对成员的支持,你可以对属性进行数据绑定,设计转载 2009-05-03 08:44:00 · 378 阅读 · 0 评论 -
关于C#中BitVector32的那么点事儿
.NET(C#)中的位操作:BitVector32结构 目录温习位操作BitVector32的位操作CreateMask方法使用BitVector32.Section来存储小整数 BitVector32结构体位于System.Collections.Specialized命名空间内,相对.NET中另外一个位容器BitArray,他的优点是速度快,占用转载 2013-01-31 11:41:45 · 849 阅读 · 0 评论