C#
文章平均质量分 75
三五月儿
修行者 服务端开发(java/.net)
展开
-
C#扩展方法初探
在这篇文章里会实现一个简单的实例,通过这个实例,希望大家能对扩展方法有一个初步的认识,仅此而已。 1.完成静态类SortHelper,该类仅仅具有一个静态方法SortInput,使用该方法可以对整型数组进行冒泡排序。using System.Collections.Generic;namespace ExtentionFunction{ public static cla原创 2013-07-27 12:32:39 · 2535 阅读 · 0 评论 -
扩展方法入门
1. 扩展方法的定义通过前一节的实例学习,我们了解到:扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。使用扩展方法,可以向现有类型“添加”方法。下面,再给出一个实例,希望通过对这个实例的学习,能进一步加深对扩展方法的理解。首先,创建扩展方法: public static class ExtendFunction { public原创 2013-08-03 18:50:43 · 2390 阅读 · 0 评论 -
C#中System.Globalization.DateTimeFormatInfo.InvariantInfo怎么用
在开发的时候,碰到下面这样一个问题:在程序中显示当前系统时间,但是有一个要求,那就是,不论系统时间格式设置成什么,界面显示的时间都必须是“yyyy/MM/dd HH:mm:ss"格式的。 刚开始,我在代码中是这样写的:this.label2.Text = System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");系统设置的日期格式为原创 2013-04-28 17:28:18 · 13572 阅读 · 1 评论 -
实例比较C#与C++字符串操作
<br />操作实例:从文本文件a.txt中读入如下格式数据:“.000000,.000000,.000000,1.000000,2.000000,3.000000,1.000000,.000000,1.000000,2.000000,.000000,3.000000,.000000,2.000000,2.000000,2.000000,2.000000,3.000000,2.000000,.000000,.000000,.000000,2.000000,2.000000,3.000000,.000000,原创 2010-12-07 16:29:00 · 2262 阅读 · 0 评论 -
C#扩展方法调用简析
通过前面两节的学习,我们了解到:扩展方法是一种特殊的静态方法,扩展方法的定义方法和一般的静态方法的定义方法类似,唯一的区别是在第一个参数的前面要加上关键字this作为修饰符。扩展方法的调用方式和扩展类型上的实例方法的调用方式一样。既然扩展方法可以像扩展类型上的实例方法一样进行调用,那么编译器怎样决定是否要使用一个扩展方法呢。对于这个问题,编译器是按照下面的流程来工作的:当编译器发现一个表达式好原创 2013-08-12 08:25:14 · 3803 阅读 · 0 评论 -
C#扩展方法 扩你所需
通过前面的学习,了解到:使用扩展方法,可以向现有类型“添加”方法。本文将使用扩展方法来对系统类型,自定义类型及接口进行方法扩展,一睹扩展方法的风采。1.使用扩展方法来扩展系统类型String是c#里面最常用的类之一,本文将以String类作为演示对象。String类中有一个静态方法IsNullOrEmpty,本文使用扩展方法将其扩展成“实例”方法。String类中IsNullOrE原创 2013-08-12 17:17:44 · 3822 阅读 · 0 评论 -
.Net类库预定义委托之Func
委托Action,Func,Predicate是平时开发中使用的较多的系统预定义委托。三者均位于.Net类库的System 命名空间下。本文将对三者中的Func委托进行介绍,希望能为那些对此感兴趣的读者带来一定的帮助。说明:这里的Func委托指的是委托定义中含有Func关键字的一类委托。我们知道这样的一类委托包括:“Func委托”,“Func> 委托”,“Func〈T,T,〉委托”等等,文原创 2013-08-25 10:11:42 · 2378 阅读 · 0 评论 -
可选参数及命名实参在一起
可选参数和命名实参是C#4.0新增的特性。本文将对可选参数和命名实参做个简单的介绍。之所以放一块来介绍,是因为两者经常成对出现,这样就可以在实例中将两者结合起来进行演示。不过一开始,还是会分开对可选参数和命名实参进行说明。1.可选参数创建可选参数非常简单,只需在声明方法时将常量赋值给某个参数,那以后调用方法时就可以不用指定该参数了,若不指定该参数,则该参数将采用方法声明时指定的默认原创 2013-08-25 22:00:08 · 2442 阅读 · 0 评论 -
C#中ref参数及out参数对比
ref 关键字和out关键字均会导致参数通过引用来传递(相同点1)。这是两者的共同点。通过引用传递参数,会使方法中对参数所做的任何修改都将反映在该变量中。两者还有一个共同点,那就是:若要使用 ref 参数或out参数,则方法定义和调用方法都必须显式使用 ref 关键字或out关键字(相同点2)。那两者有什么不同点呢?两者的不同点就是:传递到 ref 参数的参数必须最先初始化,而ou原创 2013-08-26 22:08:18 · 2690 阅读 · 0 评论 -
.Net类库预定义委托之Predicate
委托Action,Func,Predicate是平时开发中使用的较多的系统预定义委托。三者均位于.Net类库的System 命名空间下。本文将对三者中的Predicate 泛型委托进行介绍,希望能为那些对此感兴趣的读者带来一定的帮助。一开始,我们还是来看一个Predicate泛型委托的小例子,代码如下:Predicate printPredicate = delegate(stri原创 2013-08-27 22:06:01 · 2700 阅读 · 0 评论 -
C# Linq扩展方法应用
Linq中存在大量的扩展方法。在System.Linq命名空间中,存在两个使用极其广泛的类Enumerable和Queryable,它们中就含有许许多多的扩展方法。扩展方法最重要的用途之一就是在Linq中的大量使用。本文将通过使用Enumerable中的一些扩展方法来完成一些简单的实例操作,进一步了解扩展方法在Linq中的使用。1.准备工作创建本例需要用到的学生类,该类仅包含学号,姓名原创 2013-08-16 10:18:45 · 6963 阅读 · 0 评论 -
C#操作符重载
每种语言都会提供一定量的操作符,C#也不例外。我们知道,C#提供的这些操作符只能用于系统预定义的数据类型。其实,我们通过操作符重载可以使这些操作符作用于我们自己定义的类或者结构。下面将以一个向量结构体作为实例来演示操作符重载的使用方法。首先给出代码,如下:struct Vector{ public float x,y; //重写ToString(),用于查看原创 2013-08-28 22:25:28 · 3101 阅读 · 0 评论 -
.Net类库预定义委托之Action
委托Action,Func,Predicate是平时开发中使用的较多的系统预定义委托类型。三者均位于.Net类库的System 命名空间下。本文将对三者中的Action委托做一个简单的介绍,希望能为那些对此感兴趣的朋友带来一定的帮助。说明(必须的):这里的Action委托指的是委托定义中含有Action关键字的一类委托。我们知道这样的一类委托包括:“Action 委托”(就是怕和你混淆了),“原创 2013-08-17 10:48:45 · 3241 阅读 · 0 评论 -
向Access数据库插入数据时遇见的小小问题
记得前一次用Access数据库已是多年前的事了,那时还在学校混日子。这次,由于一个实验性的小项目,再次接触Access数据库(Access2007)。在使用Access数据库的过程中,遇见一个小小的问题,问题虽小,但是很纠结。问题就是:我在Debug模式下,向Access数据库插入数时,数据明明插入成功了(因为界面刷新时重新获取的数据中已经包含此条数据了,且单步跟踪代码时,ExecuteN原创 2013-08-18 11:39:31 · 4322 阅读 · 0 评论 -
奇妙的ExecuteNonQuery()方法
很久没用ADO.NET了。最近,闲着无聊,便找了个小项目做做。该项目(称为“项目”仅仅因为习惯而已,其实就很小的一个开发工作。)使用Access2007数据库,使用ADO.NET来访问数据库。在开发中,有一个需求:需要判断某条记录是否在数据库中已经存在(这个需求太常见了吧,但就是这么简单的一个小问题,却让我郁闷了一次)。一开始,我是这样实现的, 部分代码如下(实际代码有出入,以下代原创 2013-08-18 10:32:16 · 4107 阅读 · 1 评论 -
C#泛型好处知多少
1.性能性能是泛型的一个主要优点。直接上例子,通过实例可以让我们很好的理解这一点。Stopwatch stopwatch = new Stopwatch();stopwatch.Start(); //开始监视//-----代码片段1------------------StartArrayList al = new ArrayList();for (int i = 1; i ...原创 2013-09-01 12:00:53 · 9175 阅读 · 1 评论 -
C#属性总结
x.Age = 10;//x为模拟类实体1.私有字段和公有字段的比较类中的私有字段只能在类的内部访问,而对类的公有字段的访问却不受限制。在以前,为了封装,程序中会尽量少使用公有字段,因为使用公有字段的话,会让程序失去控制权。所以程序中会大量使用私有字段。不过,使用私有字段时,需要程序为私有字段定义额外的取值方法和赋值方法。下面的示例代码定义了一个私有字段age来表示年龄,同时原创 2013-08-31 21:46:16 · 2660 阅读 · 1 评论 -
C#:base与this关键字用法小结
1.base关键字在博文《C#类继承中构造函数的用法小结》一文中,我们已经学习到:使用base关键字可以帮助子类显示地调用父类的构造函数。对于这点,我们可以使用前文所给的实例代码(有裁剪)来进行说明,具体代码如下://父亲类public class FatherClass{ public FatherClass() { Console.WriteLin原创 2013-09-08 11:19:42 · 23264 阅读 · 6 评论 -
C#:readonly和const用法小结
我们都知道,使用const关键字可以将字段或局部变量声明为常量,其不能被修改。readonly关键字被用来声明只读字段,主要用于字段。两者有一定的相似性,但是也有明显的差异性,所以本文将两者结合在一起来进行说明。一开始,我们先给出四个代码小片段,这些代码小片段的功能都是使用const关键字来定义常量,但是其中某些小片段的做法是不正确的,希望大家能够找出来。Code1:priva原创 2013-09-08 18:15:36 · 6165 阅读 · 0 评论 -
C#类继承中构造函数用法小结
直接上例子,通过例子来学习知识,是我一贯的做法,呵呵。//爷爷类public class GrandfatherClass{ public GrandfatherClass() { Console.WriteLine("Constructor of GrandfatherClass"); } public Grandfather原创 2013-09-05 22:54:57 · 27030 阅读 · 3 评论 -
C#相等比较用法总结
C#中提供了4种相等比较的方法,现将这4种相等比较的用法总结如下。public class Student { private string name; public Student(string name) { this.name = name; } public v原创 2013-09-10 23:06:22 · 3063 阅读 · 0 评论 -
泛型类,泛型方法,泛型委托的定义方法
今天看书,学习到了泛型类,泛型方法及泛型委托,做一个简单的总结,仅涉及泛型类,泛型方法及泛型委托的定义方法。1. 泛型类泛型类的定义与普通类的定义类似,只是增加了泛型类型()的声明。泛型类型可以作为类中成员变量的类型,也可以作为成员方法的参数类型或方法返回值类型。class ExampleGenericClass{ //成员变量 private T classme原创 2013-09-04 22:27:53 · 4229 阅读 · 0 评论 -
判断字符串为空方法性能对比实验
今天,看到一篇博文,对判断字符串是否为空的几种方法做了一下性能对比。文中并没有给出实例代码,只是给出了最终结果,出于兴趣,我就写了点实例代码,将对比实验重新做了一遍。现对实验做个小小的总结。bool isEmpty1 = (s == "");bool isEmpty2 = (s == string.Empty);bool isEmpty3 = (s.Equals(""));bool is原创 2013-09-01 21:45:06 · 2032 阅读 · 0 评论 -
.Net Framework各个版本区别
什么是.NET Framework? .NET Framework又称 .Net框架。是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发(Rapid application development)、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌面型软件工程迈出的第一步。.NET包含许多有助于互联网和内部网转载 2013-09-15 09:35:47 · 12065 阅读 · 2 评论 -
.Net词汇表中常见缩略语汇总
.Net中存在大量的专业词汇(详细列表,请参考:Visual Studio 和 .NET Framework 词汇表),其中很多词汇常常采用缩略语的形式被大量使用。在阅读.Net书籍或网络资料时,便可以经常碰到,要是平时没有一定的积累,常常会不知所云,所以有必要对这些缩略词汇系统的学习一下。本文将它们整理在一起,以便在需要时快速查阅。其中省略了一些不常见的缩略语。 MSIL:Mic原创 2013-09-30 20:42:33 · 2234 阅读 · 0 评论 -
对象和集合初始值设定项
1 对象初始值设定项完整示例代码:using System; namespace ObjectInitExp{ class Program { static void Main(string[] args) {//片段1 Person p = new Person() { Name = "ti原创 2013-10-01 21:21:01 · 2524 阅读 · 0 评论 -
例说C#深拷贝与浅拷贝
一开始,先对C#深拷贝与浅拷贝知识做个简单的总结。无论是浅拷贝与深拷贝,C#都将源对象中的所有字段复制到新的对象中。不过,对于值类型字段,引用类型字段以及字符串类型字段的处理,两种拷贝方式存在一定的区别。下面给出完整的演示代码。using System;using System.IO;using System.Runtime.Serialization;using S原创 2013-09-30 16:52:19 · 7174 阅读 · 0 评论 -
使用Lambda表达式来简化我们的代码
演示代码1(最原始的写法):Action show = new Action(Show);show("tiana0");static void Show(string strInput){ Console.WriteLine("Hello,{0}!", strInput);} 演示代码2(使用匿名方法):Action show = new Action原创 2013-10-03 19:58:43 · 2496 阅读 · 0 评论 -
C#泛型约束
本文将对各类泛型约束做一个简单的总结。文章一开始,给出演示代码底稿(在此基础上修改,演示,说明。):class MyList { List list = new List(); public T this[int i] { get { return list[i]; } set { this.list[i] = value; }原创 2013-10-03 17:51:30 · 6011 阅读 · 0 评论 -
读书笔记之《编写高质量代码:改善C#程序的157个建议》
最近,在阅读书籍《编写高质量代码:改善C#程序的157个建议》,感觉写得很不错,特将其中的建议整理了一下,待以后随时查看。现只罗列了其中的部分建议,因为书籍还没有阅读完,会慢慢的完善补充。 1 正确操作字符串1.1 确保尽量少的装箱在使用其他值引用类型到字符串的转换并完成拼接时,应当避免使用操作符“+”来完成,而应该使用值引用类型提供的ToString方法。例如:Str原创 2013-10-05 10:49:09 · 3642 阅读 · 0 评论 -
C#多线程开发1:使用Thread类创建与启动线程
C#中,可以使用Thread类来处理(包含创建,启动,挂起,恢复,终止等操作)线程。本文将介绍如何使用Thread类来创建与启动新线程。Thread类类位于System.Threading命名空间中。1、线程创建与启动实例化一个Thread对象,就创建了一个新的线程。线程创建后调用Start()方法便可以启动新线程。下面给出一个使用Thread类创建和启动新线程的实例。原创 2013-09-21 19:54:20 · 29953 阅读 · 4 评论 -
C#中int与Int32关系揭秘
其实,关于C#中的int与Int32的关系,真的是没什么好说的。我们都知道,int关键字是 System 命名空间中的预定义类型System.Int32的别名。在.NET Framework中,这样的关键字还有很多,如short关键字是System.Int16的别名。更多关键字说明可参考:http://technet.microsoft.com/zh-cn/magazine/ya5原创 2013-09-21 21:13:19 · 10364 阅读 · 0 评论 -
C#多线程开发2:线程挂起,恢复与中止等操作
在博文《C#多线程开发1:使用Thread类创建与启动线程》中介绍了线程的创建与启动。本文将在前文的基础之上,接着介绍线程的挂起,恢复与中止等操作。首先回忆一下前文的知识点。我们已经学习到:1、创建线程ThreadStart entry = new ThreadStart(CalcSum);Thread workThread = new Thread(entry);或者原创 2013-09-22 11:35:13 · 36539 阅读 · 5 评论 -
Linq中Union与Contact方法用法对比
文章一开始,我们来看看下面这个简单的实例。代码片段1:int[] ints1 = { 2, 4, 9, 3, 0, 5, 1, 7 };int[] ints2 = { 1, 3, 6, 4, 4, 9, 5, 0 };IEnumerable intsUnion = ints1.Union(ints2);IEnumerable intsContact = ints1.Concat(原创 2013-10-07 23:04:29 · 13586 阅读 · 0 评论 -
如何比较DateTime类型数据的大小
1 Equals 方法返回一个值,该值指示两个 DateTime 对象,或者一个 DateTime实例和另一个对象或 DateTime是否具有相同的值。 (MSDN)下面通过实例代码来对Equals 方法的使用进行说明。 代码片段1DateTime d1 = System.DateTime.Now;Console.WriteLine("d1={0}", d1);Thre原创 2013-09-28 21:39:33 · 18052 阅读 · 0 评论 -
例说装箱与拆箱性能消耗
我们一直都知道,C#中的装箱与拆箱操作存在性能消耗。并且,泛型的使用能较好的解决这个问题,具体内容请阅读《C#泛型好处知多少》。今天不上班,闲着无事,写了段实例代码,来看看实际情况又是怎样。完整代码如下:using System;using System.Diagnostics;namespace BoxExp{ class Program {原创 2013-09-29 10:07:32 · 4824 阅读 · 0 评论 -
C#计算时间间隔的方法小结
初始化两个时间变量用于演示实例。DateTime dt1 = new DateTime(2013, 10, 13, 19, 15, 50);DateTime dt2 = new DateTime(2013, 10, 13, 19, 18, 50);下面以计算两个时间相隔总秒数为例。方法一:TimeSpan ts1 = dt2.Subtract(dt1);double secI原创 2013-10-13 20:01:43 · 24678 阅读 · 0 评论 -
WPF中使窗体关闭按钮与自定义的退出按钮行为一致的做法
在开发中,我们经常需要窗体的关闭按钮(右上角的叉叉)与我们的自定义退出按钮具有相同的执行行为。这时我们可以按照本文所说的方法来实现。 问题描述:建立WPF窗体应用程序,运行程序后,界面如下所示。 在界面上修改示例数据,当示例数据发生变更(不再为“0”时即发生变更)时,点击“退出”按钮 ,必须弹出“是否保存”的提示框(如下图所示)。 点击“是”,保存并退出。点击“否”原创 2013-10-20 20:01:51 · 17462 阅读 · 1 评论 -
多线程操作集合时如何保证集合的线程安全性
先看示例代码1using System;using System.Collections.Generic;using System.Threading; namespace CollSecExp{ class Program { static void Main(string[] args) {原创 2013-10-02 11:04:25 · 7961 阅读 · 0 评论 -
Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
前段时间,公司同事开发了一个小工具,在工具执行过程中,UI界面一直处于卡死状态。通过阅读代码发现,主要是由于Dispatcher.BeginInvoke()方法使用不当导致的。本文将通过一个WPF模拟程序来演示一下界面卡死的现象,并通过修改代码来解决界面卡死的问题。希望通过对本文的学习,大家能对Dispatcher.BeginInvoke()方法有一个新的认识。文章开篇直接给出原创 2013-09-15 18:06:59 · 50944 阅读 · 8 评论