
c#基础
文章平均质量分 93
码农星球撸码J
健身 软件开发 讲师 作者 WRITING BAD
展开
-
曲线救国,使枚举enum支持字符串string
枚举是不支持string的,有的时候我们需要为枚举成员指定相应的说明性文字,如我引用SimpleEnum.Today的时候,需要在我的主界面上打印“今天”,而不是“Today”。这样就使我们在编码的时候要不停的编写switch来表示枚举变量的注释。那么,有没有更好的办法来维护我们的枚举成员呢。本文将提供一种解决方法。 例如,有如下枚举变量:public enum SimpleEnum原创 2009-02-19 22:48:00 · 9228 阅读 · 1 评论 -
C#老生常谈之AutoResetEvent和ManualResetEvent
C#老生常谈之AutoResetEvent和ManualResetEvent 一:终止状态和非终止状态 首先说说线程的终止状态和非终止状态。AutoResetEvent和ManualResetEvent的构造函数中,都有bool变量来指明线程的终止状态和非终止状态。true表示终止状态,false表示非终止状态。看代码片段1: 代码片段1: AutoRes原创 2010-04-11 13:47:00 · 5406 阅读 · 1 评论 -
C#老生常谈之异步调用的参数及返回值
C#老生常谈之异步调用的参数及返回值 首先,看代码 代码段1: public delegate string FuncHandle(int data1, int data2); FuncHandle fh ; private void BT_Temp_Click(object sender, RoutedEventA原创 2010-04-10 10:59:00 · 17264 阅读 · 2 评论 -
从异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }说开去
查看如下代码: this.Invoke(delegate { MessageBox.Show("t4"); }); 熟悉winform的开发者都知道,this是一个窗体的实例,故不做另外解释。该代码的运行,就会导致异常:{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }。 其实,要从错误的提示信息来看,这个匿名方法写的是一点问题都没有的。问题原创 2010-06-19 14:54:00 · 4238 阅读 · 0 评论 -
C#笔记19:多线程之线程启动、参数、返回值
<br />C#笔记19:多线程之线程启动、参数、返回值 <br />本章概要: <br />1:如何新起线程 <br />2:Thread传参数及取得返回值 <br />3:IsBackground <br />4:异步调用中的参数和返回值 <br /><br />1:如何新起线程 <br /> 新起一个线程的方法,可以使用Thread,BackgroundWorker ,ThreadPool,控件.BeginInvoke,委托.BeginInvoke,Timer。<br /> 创建多线程处理原创 2010-10-05 22:03:00 · 1595 阅读 · 0 评论 -
C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent
<br />C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent <br />本章概要: <br />1:终止状态和非终止状态 <br />2:AutoResetEvent和ManualResetEvent的区别 <br />3:WaitHandle.WaitOne()等 <br /> <br />1:终止状态和非终止状态 <br /> 首先说说线程的终止状态和非终止状态。AutoResetEvent和ManualResetEvent的构造函数中,都原创 2010-10-05 22:04:00 · 1548 阅读 · 1 评论 -
C#笔记12:索引器
<br />C#笔记12:索引器 <br />本章概要: <br />1:索引器概述 <br />2:示例<br /> <br />1:索引器概述<br /><br />使用索引器可以用类似于数组的方式为对象建立索引。<br />get 访问器返回值。set 访问器分配值。<br />this 关键字用于定义索引器。<br />value 关键字用于定义由 set 索引器分配的值。<br />索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。<br />索引器可被重载。<br />索引器可以有多原创 2010-10-05 21:14:00 · 782 阅读 · 0 评论 -
C#笔记13:迭代器
C#笔记13:迭代器 本章概要: 1:迭代器概述 2:创建迭代器3:创建多个迭代器4:泛型中的迭代器1:迭代器概述 迭代器是可以返回相同类型的值的有序序列的一段代码。迭代器可用作方法、运算符或 get 访问器的代码体。迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.原创 2010-10-05 21:23:00 · 784 阅读 · 0 评论 -
C#笔记15:序列化
<br />C#笔记15:序列化 <br />本章概要: <br />1:为什么需要序列化<br />2:序列化的几种形式<br />3:关于XML序列化,多说一点<br />4:JSON是什么 <br /> <br />1:为什么需要序列化<br /> 序列化是将对象转换为字节流以将其保存在内存、数据库或文件中的过程。其主要目的是保存对象的状态,以便可以在需要时重新创建对象。相反的过程称为反序列化。<br /> 此图显示序列化的整个过程。 <br /><br /> 对象被序列化为流原创 2010-10-05 21:48:00 · 1049 阅读 · 0 评论 -
C#笔记22:多线程之停止或取消线程
<br />C#笔记22:多线程之停止或取消线程<br /> <br />1:为什么不建议使用Abort取消<br />2:如何是正确的取消<br />3:FRAMEWORK4中的取消<br /> <br />1:为什么不建议使用Abort取消<br /> 来看下面的代码:using (FileStream fs = File.Open(myDataFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)){ ...d原创 2010-10-05 22:07:00 · 3006 阅读 · 0 评论 -
C#笔记14:语言集成查询 (LINQ)
<br />C#笔记14:语言集成查询 (LINQ) <br />本章概要: <br />1:延迟查询<br />2:立即执行<br />3:LINQ的基础<br />4:LINQ查询关键字<br />5:LINQ查询中的类型转换 <br /> <br /> 借助于 LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。<br />1:延迟查询<br /> 查询变量本身只是存储查询命令。 实际的查询执行会延迟到在 foreach 语句中循环访问查询变量时发生。class IntroToL原创 2010-10-05 21:46:00 · 1292 阅读 · 0 评论 -
C#笔记16:协变与逆变
<br />C#笔记16:协变与逆变 <br />本章概要: <br />1:协变与逆变概念<br />2:协变<br />3:逆变<br />4:注意事项<br />5:接口变体语法 <br /> <br />1:逆变与协变概念<br /> “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型。<br /> “逆变”则是指能够使用派生程度更小的类型。<br /> 如果泛型接口或委托的泛型参数声明为协变或逆变,则将该泛型接口或委托称为“变体”。 <br /> <br />原创 2010-10-05 21:53:00 · 1559 阅读 · 0 评论 -
C#笔记25:比较和排序(IComparable和IComparer以及它们的泛型实现)
<br />C#笔记25:比较和排序(IComparable和IComparer以及它们的泛型实现) <br />本文摘要: <br />1:比较和排序的概念;<br />2:IComparable和IComparer;<br />3:IComparable和IComparer的泛型实现IComparable<T>和IComparer<T>;<br /> <br />1:比较和排序的概念<br /> 比较:两个实体类之间按>,=,<进行比较。<br /> 排序:在集合类中,对集合类中的实体进行排原创 2010-10-05 22:08:00 · 4180 阅读 · 0 评论 -
C#借助API实现黑盒自动化测试工具的编写
<br />C#借助API实现黑盒自动化测试工具的编写<br /> <br />本文代码下载(VS2010开发):http://download.youkuaiyun.com/source/2796362<br />本文摘要:<br />1:一个简单的例子 <br /> 1.1:EnumChildWindows介绍<br /> 1.2:主要源码<br />2:难点:如何获取指定的控件句柄<br /> 2.1:使用SPY++<br /> 2.2:获取控件位置<br /> 2.3:获取控件ID<原创 2010-11-05 10:18:00 · 1317 阅读 · 0 评论 -
lock vs Monitor vs Mutex之间的区别
Consider this code:lock(myGuard){ // do some stuff that is being synchronized}the C# compiler generates the following code for youMonitor.Enter(myGuard);try{ // do some stuff that is being synch原创 2010-03-23 15:54:00 · 2177 阅读 · 0 评论 -
多线程BUG捕捉之:由于其他线程拥有此对象,因此调用线程无法对其进行访问
以下论述只适用于WPF和WCF场合。 在进行WCF通信的时候,有时候会出现“由于其他线程拥有此对象,因此调用线程无法对其进行访问”。如下面的这段代码就可能会出现这个错误: EndpointAddress tcpAddress = new EndpointAddress(new Uri(_wcfServiceUri), identity, headers)原创 2010-03-16 18:09:00 · 5185 阅读 · 1 评论 -
SSL原理
SSL原理一 前言 首先要澄清一下名字的混淆: 1 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。 2 IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport LayerSecurity),从技术上讲,TLS1.0与SS转载 2009-03-21 18:29:00 · 6706 阅读 · 0 评论 -
消息队列示例程序
消息队列 首先,测试了几个异常情况下的案例: 1:接收方断网; 2:发送方断网; 3:发送方关机; 发现,1和2在默认情况下就能满足,3需要对消息的Recoverable设置为true; 发送方代码如下: public System.Messaging.MessageQueue helpRequestQueue= new System.Me原创 2009-09-23 16:22:00 · 990 阅读 · 0 评论 -
remoting教学一:remoting与socket、webservice和wcf的比较及优势
remoting与socket、webservice和wcf的比较及优势 1:socket VS remoting 使用socket无疑是效率最高的。但是,在复杂的接口环境下,socket的开发效率也是最低的。故在兼顾开发效率的情况下,可以使用remoting来代替socket开发。并且: 1、Tcp通道的Remoting速度非常快。 你可以通过端口查看工具,发现re原创 2009-10-15 17:24:00 · 9251 阅读 · 1 评论 -
WINFORM未处理异常之捕获
WINFORM未处理异常之捕获 //处理未捕获的异常 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); //处理UI线程异常 Application.ThreadException += new System.T原创 2010-01-16 10:22:00 · 4941 阅读 · 2 评论 -
C#生成缩略图及水印
/// /// 获取一个图片按等比例缩小后的大小。/// /// 需要缩小到的宽度/// 需要缩小到的高度/// 图片的原始宽度/// 图片的原始高度/// 返回图片按等比例缩小后的实际大小public static Size GetNewSize(int maxWidth, int maxHeight, int imageOriginalWidth, int im转载 2010-02-11 09:45:00 · 872 阅读 · 0 评论 -
c#中函数调用的按值传递和按引用传值
首先需要强调的是,C#中,函数调用的传值方式和JAVA在若干细节上是不同的。这曾经给我造成了混淆。在C#中,基本原则是:1:内置基本类型,外加基本类型的类形式,都是值传递;2:用户自定义类型,为引用传递; 测试用例:class Program { static void Main(string[]原创 2010-02-28 10:13:00 · 3129 阅读 · 0 评论 -
WPF跨线程访问线程安全的数据(如解决:该类型的CollectionView不支持从调度程序线程以外的线程对其SourceCollection)
典型应用场景:WPF页面程序中,ListView的ItemsSource是一个ObservableCollection;操作:另起一个线程,为ListView动态更新数据,也就是给ObservableCollection添加记录。这类操作,就是跨线程访问线程安全的数据,如果不使用Dispatcher,就会导致出错“该类型的CollectionView不支持从调度程序线程以外的线程对其Sourc原创 2010-03-07 13:05:00 · 21210 阅读 · 10 评论 -
C#大文件传输之SOCKET同步、异步、WCF同步、异步
当前的项目,正好急需要在C#下实现高效率的文件传输,故,写了如下DEMO对此进行了比较。该示例,整合了C#文件传输中的SOCKET同步、异步、WCF同步、异步,并分别提供了进度条,以便查看各类传输的效率(SOCKET同步>SOCKET异步>WCF同步>WCF异步)。运行的时候,需要自己在运行目录下添加一个可供传输的文件。可查看源码获取该文件名。 源码下载地址:http://download原创 2010-03-10 14:17:00 · 7354 阅读 · 4 评论 -
使用类来代替enum
enum的缺点在于1:无状态说明。如果要使用状态属性,还需要加上属性值。见http://blog.youkuaiyun.com/luminji/archive/2009/02/19/3912239.aspx。2:无法进行型别检查。 现通过如下的方法可以用class来代替enumclass ClientInfo { public static readonly C原创 2010-03-10 17:00:00 · 1391 阅读 · 0 评论 -
在C#中实现ObservableDictionary
在当前的.NET FRAMEWORK中是没有实现了INotifyCollectionChanged和INotifyPropertyChanged的字典集合的,这直接导致了WPF或者SILVERLIGHT中的LISTVIEW等控件不能动态显示集合中的更新。故,我们需要自己实现一个ObservableDictionary。 代码下载地址:http://download.原创 2010-03-09 15:59:00 · 4268 阅读 · 0 评论 -
C#老生常谈之访问修饰符
很奇怪的一点是,网上搜索了一些访问修饰符的资料,居然有些是错误的。现归纳如下:类的访问修饰符(非内部内)private: 不可用protected: 不可用protected internal: 不可用internal: 限定与本Assembly内public: 无限制默认:=internal 类成员的访问修饰符private: 限定于本类protected: 限定与派原创 2010-03-14 17:23:00 · 738 阅读 · 0 评论 -
多线程BUG捕捉之:非网络原因导致的WCF连接超时
最近在用WPF、WCF做全双工通信,由于某一天晚上比较累了,所以未遵循少量重构的原则,重构了几大段自己认为没有问题的代码,并且,重构完毕仅编译通过,未进行测试。结果代码到了第二天运行的时候出现了问题: 发送到 net.tcp://192.168.0.96:9999/HelloWCFService 的请求操作在配置的超时(00:00:04.9979999)内未收到回复。分配原创 2010-03-16 07:32:00 · 5052 阅读 · 1 评论 -
多线程BUG捕捉之:匿名函数带来的问题
最近有一个隐藏的BUG,是因为使用匿名函数导致的。 要重现该BUG,可以先查看如下两个程序。 第一个: class Program { static void Main(string[] args) { for (int i = 0; i { D原创 2010-03-16 18:15:00 · 2170 阅读 · 1 评论 -
C#数据本地存储方案之SQLite
<br />即使是做网络应用,在断线情况下,也需要考虑数据的本地存储。在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储。ACCESS不支持事务原子性,在断电情况下(这种情况总是会发生)会导致数据很难恢复。 <br /> <br />一:安装<br />SQLITE,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统。我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.NET provider for原创 2011-01-01 11:05:00 · 1520 阅读 · 0 评论