随笔分类 -  C#

摘要:有很多扩展类的方式,如果有类的源代码,继承是给对象添加功能的好方法。但如果没有源代码,我们可以用扩展方法,它允许改变一个类,但不需要该类的源码。 扩展方法是静态方法,他是类的一部分,但实际上没有放在类的源代码中,假如有一个Money类,里面有个Amount属性,我们想给其增加一个方法,可以如下编写: public static class MoneyExtension { public static void AddToAmount(this Money money, decimal amountToAdd) { money.Amo... 阅读全文
posted @ 2014-01-02 11:59 蚂蚁拉车 阅读(419) 评论(0) 推荐(0) 编辑
摘要:摘要:.Net提供了许多多线程编程工具,可能是因为太多了,所以掌握起来总是有一些头疼,我在这里讲讲我总结的一些多线程编程的经验,希望对大家有帮助。1.多线程的总结不需要传递参数,也不需要返回参数我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下: public void test() { ThreadStart threadStart = new ThreadStart(Calculate); Thread thread = new Thread(threadStart); thread.Start(); } p... 阅读全文
posted @ 2013-12-11 13:26 蚂蚁拉车 阅读(289) 评论(0) 推荐(0) 编辑
摘要:一些关于xml的资料: 创建一个xml static void CreateFile() { int N =10; Random random = new Random(); using (XmlTextWriter writer = new XmlTextWriter("d:\\qqqq.xml", Encoding.UTF8)) { writer.Formatting = Formatting.Indented; wri... 阅读全文
posted @ 2013-12-03 10:08 蚂蚁拉车 阅读(335) 评论(1) 推荐(0) 编辑
摘要://获取当前可执行的exe的文件名stringstr1=Process.GetCurrentProcess().MainModule.FileName;//获取或设置当前目录stringstr2=Environment.CurrentDirectory;//获取应用程序的当前工作目录stringstr3=Directory.GetCurrentDirectory();//获取基目录stringstr4=AppDomain.CurrentDomain.BaseDirectory;//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称stringstr5=Application.Star 阅读全文
posted @ 2013-11-22 11:14 蚂蚁拉车 阅读(294) 评论(0) 推荐(0) 编辑
摘要:假设有这么个场景,一个仓库,里面有N件货物,现有六个搬运工(用线程模拟),其中2个向仓库放东西,4个往外搬东西。假设1秒能向里放2件货物,同时可向外搬3件货物(线程休眠),现在需要往里放M件货物,一旦仓库有货就要向外搬,这个东西怎么设计? 这显然牵扯到线程同步的问题。本来,考虑的有点简单了,只用了一个锁,但结果是在执行一个动作的同时,另一个动作一直在等待(比如,放的时候,搬的线程等待放完后,才能开始运行),也就是在一秒内,只能放或者搬,这样的话,还不如一个线程全跑下来了,还省事。思考良久后,请教了一下,原来这种问题要放两个线程锁(对应两个动作),恍然大悟。好了,别的不说了,直接上这货的代... 阅读全文
posted @ 2013-11-20 20:27 蚂蚁拉车 阅读(400) 评论(0) 推荐(0) 编辑
摘要:摘要:本文介绍在C#中手把手教你用C#打包应用程序(安装程序卸载程序)1:新建安装部署项目打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定.(详细见下图)此主题相关图片如下:2:安装向导关闭后打开安装向导,点击下一步,或者直接点击完成.3:开始制作安装向导完成后即可进入项目文件夹:双击"应用程序文件夹"在右边的空白处右击,选择添加->文件,将你的做的应用程序的可执行文件和相应的类库和组件添加进来.然后右击你的可执行文件,创建快捷方式,然后把快捷方式分别剪切或复制到左边的"用户的'程序&# 阅读全文
posted @ 2013-11-20 09:44 蚂蚁拉车 阅读(499) 评论(0) 推荐(0) 编辑
摘要:CLR中采用代(generation)来作为其垃圾回收的一种机制,其唯一的目的是提升程序的性能。基予代的垃圾回收器有以下假设: ·对象越新,其生存周期越短。 ·对象越老,其生存周期越长。 ·回收堆的一部分,速度快于回收整个堆。 托管堆在初始化时不包括任何对象。添加到堆的对象称为第0代对象。下图展示一个新启动的应用程序,其分配了五个对象(A-E)。运行一段时间后,C、E变为垃圾。 CLR初始化时,它会为第0代对象选择一个初始容量,假定为256KB。当分配对象时,一旦第0代超出这个数值,就必须启动一次垃圾回收。假如A-E刚好占用256KB,分配F时,会启动垃圾回收。此 阅读全文
posted @ 2013-11-14 16:38 蚂蚁拉车 阅读(403) 评论(0) 推荐(1) 编辑
摘要:只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{n,}$"。 只能输入m~n位的数字:。"^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。 只能输入非零的正整数:"^\+?[1-9] 阅读全文
posted @ 2013-11-13 09:41 蚂蚁拉车 阅读(200) 评论(0) 推荐(0) 编辑
摘要:在java中,string和String有着明显的区别,后者就是前者的一个封装。在c#中,好像是通用的,大部分情况下,两者互换并不会产生问题。今天特意查了一下资料,了解了一下两者的关系。 简单的讲,String指的是System.String类别,而string则是C#内建的关键字。事实上,string正是对应到System.String类别,也可说string是System.String 类别在C#中的化名(alias),因此对两者的应用会生成相同的IL码,对於CLR而言这两者是没什么差别的。 再具体一些,就要从内建类型(Predefined Type)谈起了。 内建类型,又称做原生... 阅读全文
posted @ 2013-11-08 14:32 蚂蚁拉车 阅读(1154) 评论(0) 推荐(0) 编辑
摘要:publicstaticintrandomSelect(int[]A,intk){returnrandomSelectDo(A,0,A.Length-1,k);} privatestaticintrandomSelectDo(int[]A,intlow,inthigh,intk){inti=randomPartition(A,low,high);//nisthenumberofk)returnrandomSelectDo(A,low,i-1,k);elseif(n==k)returnA[i];elsereturnrandomSelectDo(A,i+1,high,k-n-1);} priv.. 阅读全文
posted @ 2013-11-08 10:01 蚂蚁拉车 阅读(303) 评论(0) 推荐(0) 编辑
摘要:命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary字典和List列表。Dictionary字典通常用于保存键/值对的数据,而List列表通中用于保存可通过索引访问的对象的强类型列表。下面来总结一下,用代码来演示怎么初始化,增加,修改,删除和遍历元素。Dictionary字典 代码如下:namespace DictionaryDemo1{ class Program { static void Main(string[] args) { //创建Di... 阅读全文
posted @ 2013-11-07 09:44 蚂蚁拉车 阅读(2103) 评论(0) 推荐(0) 编辑
摘要:在clr var c#一书中,作者描述当用sealed修饰类时,可以提高系统性能而且建议大家也养成用sealed来修饰类的习惯。由于对性能二字比较敏感,所以本文先测试一下用sealed分别修饰和不修饰类时,new1亿次的时间,然后说一下我的看法,如果有更好的测试方法,欢迎大家在此交流。 首先上我的测试代码: class Program { static void Main(string[] args) { for (int j = 0; j < 10; j++) { V t ... 阅读全文
posted @ 2013-11-04 20:53 蚂蚁拉车 阅读(2080) 评论(4) 推荐(0) 编辑
摘要:当某个字段是引用类型,且该字段是readonly类型时,那么不可改变的是引用,而非引用的对象。如以下代码: public sealed class AType { public static readonly char[] InvalidChar=new char[]{'A','B','C'}; } public sealed class AnOtherType { public static void M() { //下面三行代码是合法的,可通过编译,并可成功 //修改Inva... 阅读全文
posted @ 2013-10-30 14:06 蚂蚁拉车 阅读(160) 评论(0) 推荐(0) 编辑
摘要:为了方便开发人员使用反射或者与基本组件通信,c#编译器允许将一个表达式的类型标记为dynamic。还可将一个表达式的结果放到一个变量中,并将变量的类型标记为dynamic,然后,用这个dynamic表达式调用一个成员。如下面代码: 1 static void Main(string[] args) 2 { 3 for (int i = 0; i < 2; i++) 4 { 5 dynamic arg = (i == 0) ? (dynamic)5 : (dynamic)"A"; 6 ... 阅读全文
posted @ 2013-10-29 16:43 蚂蚁拉车 阅读(288) 评论(0) 推荐(0) 编辑
摘要:一 前言 反射 这个名词给我的第一印象就是 高深的感觉,虽然项目中有用到,只是通过反射枚举来取值,后来发现居然不需要用反射............第二个印象就是性能不高,貌似对反射大家已经形成定向思维了,一扯到反射就和性能扯上关系.....本文抛开性能不谈,因为关于性能,有太多的人做过测试了我就不说什么了,但我相信"存在即合理" 好了 进入正题!注:本人水平有限,难免会有理解不了或理解错误的地方,还望大家在评论中指出,我会马上更正。谢谢了~二 反射介绍2.1 什么是反射 有关程序及其类型的数据被称为元数据,它们保存在程序的程序集中。而程序在运行时,可以查看其他程序集或其本身 阅读全文
posted @ 2013-10-24 14:28 蚂蚁拉车 阅读(260) 评论(0) 推荐(0) 编辑
摘要:ref和out往外传参数时,ref和out传递的都是变量的地址。ref侧重于修改,out侧重于输出值。ref在传递之前必须要有值,因为在方法中有可能会用到这个参数的值,out在传递之前可以没有值,因为在方法中必须为这个变量赋值 阅读全文
posted @ 2013-10-18 09:26 蚂蚁拉车 阅读(166) 评论(0) 推荐(0) 编辑
摘要:全文摘自http://www.cnblogs.com/g1mist/p/3227290.html,很好的一个实例。 反射提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 1.先建立实体类 用户实体类:123456789public class User{public int id { get; set; }public string UserName { get; set; }public string Password { get; set; }public int A... 阅读全文
posted @ 2013-10-17 16:33 蚂蚁拉车 阅读(571) 评论(0) 推荐(0) 编辑
摘要:想简化一些代码,就研究了一下反射,资料不少,感觉挺难,搞得似是而非。写了个小东西回顾一下反射的用法。 建一个User类classUser { privatestringuserid="0001"; publicstringUserid { get{returnuserid;} set{userid=value;} } privatestringuserName="aaa"; publicstringUserName{ get{returnuserName;} set{userName=value;} } privatestringaddress=&quo 阅读全文
posted @ 2013-10-17 16:05 蚂蚁拉车 阅读(162) 评论(0) 推荐(0) 编辑
摘要:任何一个使用.NET的人描述线程与进程的区别?什么是Windows服务,它的生命周期与标准的EXE程序有什么不同Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?EXE和DLL之间的区别是什么?什么是强类型,什么是弱类型?哪种更好些?为什么?PID是什么?在做系统的故障排除时如何使用它?单个TCP/IP端口上能够侦听多少个进程?什么是GAC?它解决了什么问题?中级.NET开发人员阐述面向接口、面向对象、面向方面编程的区别什么是Interface?它与Class有什么区别?什么是反射?使用ASMX的XML Web服务与使用SOAP的.N 阅读全文
posted @ 2013-10-17 15:54 蚂蚁拉车 阅读(1193) 评论(0) 推荐(1) 编辑
摘要:在之前的一个课题中,曾经需要用到2W行*3W列的float类型矩阵(大约2.4G),由于无法创建大于2G的对象,当时采用了一些取巧的办法回避了,并没有拿出精力来研究一下这个问题。今天和公司的张哥(大牛级人物)重新谈到了这个话题,在他的一些指引下感觉收获颇深,发博记录一下。 首先,大家应该知道.net4.5以前,C#是无法创建内存大于2G的对象的。而且经测试,这仅仅是对64位平台的限制,在32位平台上,大约对象在1.47G左右的时候就会报异常了。至于其为什么这样设计,大家可以参考博文:http://blogs.msdn.com/b/joshwil/archive/2005/08/10/45... 阅读全文
posted @ 2013-10-17 13:14 蚂蚁拉车 阅读(4936) 评论(8) 推荐(4) 编辑