文章分类 - C#
摘要:"^\d+$" //非负整数(正整数 + 0)"^[0-9]*[1-9][0-9]*$" //正整数"^((-\d+)|(0+))$" //非正整数(负整数 + 0)"^-[0-9]*[1-9][0-9]*$" //负整数"^-?\d+$" //整数"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*
阅读全文
摘要:Resharper进阶一:简要介绍面对这样一个问题:为什么.net能够比java更加快速的完成开发?恐怕最大的优势在于Microsoft提供了一个无比强大的IDE。它的强大在于适用于各个层次的开发人员。当你还是一只小小鸟的时候,可以学会drag&drop,当你开始写代码的时候,你会发现设计器生成的代码是多么愚蠢和臃肿。当你自己能够写出干净的代码时,可能再也不想切换到设计器中去了(切换/F7)。我相信我们中的大部分人,即使是最资深的Windows开发人员,用VS写代码比用记事本的效率要高很多,因为我们毕竟需要IDE的帮助以提高我们的生产力。但是在那个没有Resharper的年代里,你的生
阅读全文
摘要:工欲善其事,必先利其器。N多年前微软官网曾发了.Net下必备的十种工具,N多年过去了,世异时移,很多东西都已经变化了,那个列表也似乎陈旧了。而且,该文也只是对十种工具独立的介绍,显得有些罗列的感觉,是不是每个工具都是同等重要,工具与工具之间是否有联系?等等,阐述得并不明确。这里,我想从另一个角崖,重新归纳一个更新的更实际的武器库。更新,是因为有很多最近几年才出来的工具/框架库,更实际,是因为我自己的项目就完全依赖使用。Visual Studio这个似乎是不言而喻的,只是从严谨的角度,也列在这。实际上,现在也有一个开源的IDE开发环境发展也不错,叫SharpDevelop。我并没有仔细看,不敢妄
阅读全文
摘要:总结:①序列化基本是指把一个对象保存到文件或流中,比如可以把文件序列化以保存到Xml中,或一个磁盘文件中②序列化以某种存储形式使自定义对象持久化;③将对象从一个地方传递到另一个地方。④将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。⑥序列是指将对象的实例状态存储到存储媒体的过程。在此过程中,先将对象的公共字段以及类的名称(包括类的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。⑦用处非常大,用于数据传输,对象存贮等。这些是我通过网上多方参考再结合自己的经验总结的。还是看实例。?usingS
阅读全文
摘要:本文是一个菜鸟所写,本文面向的人群就是像我这样的小菜鸟,工作一年也辛辛苦苦学习了一年,一直没有机会梳理一下自己的知识,最近花了一些时间整理了一些C#基础知识,也算是对过去的一年做个回顾把~文章有点长,请自带瓜子和茶吧,请看下面C#基础知识简单架构图,不可能100%的全面,请见谅啊...1.值类型和引用类型 1.1堆和栈 简单的说值类型存放在堆栈上面,引用类型的数据存放在托管堆上面(它的引用地址却存放在堆栈上面)! 栈:它是一个内存数组,是一个先进后出的数据结构! 栈的特征:数据只能从栈顶进,从栈顶出! 堆:它是一个内存区域,可以分配大块区域存储某类型的数据,与栈不同的是它里面的数据可...
阅读全文
摘要:Microsoft.Csharp包含支持用C#语言进行编译的代码Microsoft.Jscript包含支持用Jscript语言进行殡仪和代码生成的Jscript运行库和类Microsoft.VisualBasic包含Visual Basic.NET运行库。此运行库于Visual Basic.NET语言一起使用。此命名空间包含支持Visual Basic.NET语言进行编译和代码生成类。Microsoft.Win32提供两中类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。System最重要的类,包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性、和处理异常的基础类
阅读全文
摘要:.net(C#)的命名规范本文从类、类字段、方法属性、参数常量、接口、事件、命名空间等9个方面总结了C#语言命名的规则。下面介绍C#语言命名的9种规范:a)类【规则1-1】使用Pascal规则命名类名,即首字母要大写。【规则1-2】使用能够反映类功能的名词或名词短语命名类。【规则1-3】不要使用“I”、“C”、“_”等特定含义前缀。【规则1-4】自定义异常类应以Exception结尾。【规则1-5】文件名要能反映类的内容,最好是和类同名。b) 类字段【规则2-1】用camel规则来命名类成员变量名称,即首单词(或单词缩写)小写。【规则2-2】类字段变量名前可加“_”前缀。【规则2-3】坚决禁止
阅读全文
摘要:如何手工释放资源?答:.NET 平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的工作。但在以下两种情况需要我们手工进行资源释放:一、由于它无法对非托管资源进行释放,所以我们必须自己提供方法来释放对象内分配的非托管资源,比如你在对象的实现代码中使用了一个COM对象;二、你的类在运行是会产生大量实例(象 GIS 中的Geometry),必须自己手工释放这些资源以提高程序的运行效率最理想的办法是通过实现一个接口显式的提供给客户调用端手工释放对象,System 命名空间内有一个 IDisposable 接口,拿来做这事非常合适,省得我们自己再声明一
阅读全文
摘要:一、了解C#中的预定义事件处理机制在写代码前我们先来熟悉.net框架中和事件有关的类和委托,了解C#中预定义事件的处理。EventArgs是包含事件数据的类的基类,用于传递事件的细节。EventHandler是一个委托声明如下public delegate void EventHandler( objectsender, EventArgs e)注意这里的参数,前者是一个对象(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1),后面是包含事件数据的类的基类。下面我们研究一下Button类看看其中的事件声明(使用WinCV工具查看),以Click事
阅读全文
摘要:反射是一种晚绑定,它可以被开发者用来设计出更具灵活性的代码,而代价则是花费更多的系统资源开销使得应用程序可以在运行时获取一些未知信息。说白了,在编写代码的时候,开发者可能还不知道或不能确定一些对象的信息,于是把决定权交给代码本身,将来在需要的时候由代码自己去获取和判断这些信息并作出相应的反应。这样的方式固然可以使代码更加灵活,但在想要使用反射的时候,必须先考虑好在性能与灵活之间的一个权衡,不能盲目地因为C#提供了反射机制就一个劲儿地用,我们应该发扬John Carmack“榨干PC机3D图像性能”的精神,而不要因为硬件越来越便宜就让机器背负沉重的包袱去做一些意义不大的事情。我们还是继续本系列一
阅读全文
摘要:我们可以通过使用DataTime这个类来获取当前的时间。通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04)、时间(12:12:12)、日期+时间(2008-09-04 12:11:10)等。//获取日期+时间DateTime.Now.ToString(); // 2008-9-4 20:02:10DateTime.Now.ToLocalTime().ToString(); // 2008-9-4 20:12:12//获取日期DateTime.Now.ToLongDateString().ToString(); // 2008年9月4日DateTime.Now.ToS
阅读全文
摘要:匹配网址URL的正则表达式:1:[url=http://([w-]+.)+[w-]+(/[w[/url]http://([w-]+.)+[w-]+(/[w[/url[/url]]- ./?%&=]*)?2:^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$3:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$匹配Email的正则表达式:1:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*2:^[\w-]+(\.[\w-]+)*@[\
阅读全文
摘要:-C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑。 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程序猿,开个玩笑^_^。 相信有过C#面试经历的人,对下面这句话一定不陌生: 值类型直接存储其值,引用类型存储对值的引用,值类型存在堆栈上,引用类型存储在托管堆上,值类型转为引用类型叫做装箱,引用类型转为值类型叫拆箱。 但仅仅背过这句话是不够的。 C#程序员不必手工管理内存,但要编写高效的代码,就仍需理解后台发生的事情。 在学校的时候老师们最常说的一句话是:概念不清。最简单的例子,我熟...
阅读全文
摘要:当进行“与”运算时,从左向右比较,出现一个为false时,立即退出,不会比较后台的,即使后面的有异常程序也不报错 当进行“或”运算时,从左向右比较,出现一个为true时,立即退出,不会比较后台的,即使后面的有异常程序也不报错 List<int> arr = null; if ( arr != null || arr.Count > 0)//其实arr.Count会报语法错误,但这里是正确的用法,先比较是否为null,再看它的集合数量 Console.WriteLine("ok"); else Console.WriteLine("oks"
阅读全文
摘要:提纲开灯的例子暗流涌动Guru眼中的依赖DIP(依赖倒置原则)为什么要解耦合?接口的坏味道同一张类图的不同解释——真假DIP了解DIP有什么用?DIP用在什么地方?下回预告参考文献开灯的例子 选开灯做例子,是因为这个例子既常见又简单,而且潜在的需求多样。对于最简单的灯,从功能上讲,按下灯上的开关,灯就开了。 用代码实现这样一个有开关功能的灯,也是一件很容易的事情。public class Light{ public void TurnOn() { Console.WriteLine("Light Turn On"); } public void TurnOff() { Co
阅读全文
摘要:一、参数的一般传递方式 在c#中,除非使用ref或者out前缀,所有参数都通过值来传递。变量的栈数据会完整复制到目标参数中。分为以下3种情况:1、 引用类型的变量只包含对象所在的内存地址,将要复制的是内存地址而不是对象本身,所以对底层对象的修改会保留。如果在方法内部将内存地址指向一个新对象, 则方法结束后在方法中所作的修改会被丢弃。 class Program 2 3 { 4 5 static void Main(string[] args) 6 7 { 8 9 Employee myE = new Employee() { id=4};10 11...
阅读全文
摘要:架构引用维基百科:软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来实施和管理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。软件架构师与客户商谈概念上的事情,与经理商谈广泛的设计问题,与软件工程师商谈创新的结构特性,与程序员商.
阅读全文
摘要:类型,对象,线程栈和托管堆在运行时的相互关系(一)中说到类型,对象,线程栈和托管堆在运行时的相互关系。下面围绕CLR再来讨论这个问题。定义如下两个类。internal class Employee {public public Int32 GetYearsEmployed() { ... }public virtual String GenProgressReport() { ... }public static Employee Lookup(String name) { ... }}internal sealed class Manager : Employee {public over.
阅读全文
摘要:Effective C#(第2版)中文名称为:C#高效编程 改进C#代码的50个行之有效的办法(第2版)这本书的中文名字起的很蛋疼,其它Effective系列的书名都是Effective XXX,在网上商城输入Effective就能全找到,唯独这本死活找不到,后来偶然机会才知到原来中文名称叫做C#高效编程 改进C#代码的50个行之有效的办法,真是蛋疼至极。第一章 C#语言习惯条目1 使用属性而不是可访问的数据成员条目2 用运行时常量(readonly)而不是编译期常量(const)条目3 推荐使用 is 或 as 操作符而不是强制类型转换条目4 使用 Conditional 特性而不是#if
阅读全文
摘要:我们已经知道了值类型和引用类型,但是一定要区别"值类型和值参数","引用类型和引用参数",这一点是最容易让初学者搞晕的,说白了,所谓"类型",就是一种相似或相同的东西的抽象,它表示了一种相类似,例如,把东西分"类",此时这个类就是我们说的类型,而值参数和引用参数呢?无论这两个中的哪个,都离不开"参数"二字,什么是参数?或者说参数是在什么里面的?答案当然是方法里面,离开了"方法()"的这对"小括号()"就无从谈起参数,说到这我们就知道了,参数肯定是在'
阅读全文

浙公网安备 33010602011771号