随笔分类 - C#
摘要:Resharper进阶一:简要介绍官方下载地址下载地址注册码:用户名: User注册码:D9d09DSYJel9IyuDU4btAQwZcbLugUad 面对这样一个问题:为什么.net能够比java更加快速的完成开发?恐怕最大的优势在于Microsoft提供了一个无比强大的IDE。它的强大在于适用于各个层次的开发人员。当你还是一只小小鸟的时候,可以学会drag&drop,当你开始写代码的时候,你会发现设计器生成的代码是多么愚蠢和臃肿。当你自己能够写出干净的代码时,可能再也不想切换到设计器中去了(切换/F7)。我相信我们中的大部分人,即使是最资深的Windows 开发人员,用VS写代码
阅读全文
摘要:1:安装后,Resharper会用他自己的英文智能提示,替换掉 vs2010的智能提示,所以我们要换回到vs2010的智能提示2:快捷键。是使用vs2010的快捷键还是使用 Resharper的快捷键呢?我是使用re的快捷键3:esharper安装后,会做几件事情,这几件事情对于除此使用者,比较麻烦,因此归纳总结一下,以资参考。(1)、会将选项——文本编辑器——C#——常规——自动列出成员 这个选择框的勾选去掉。这样当你使用某个方法的时候,便不会提示参数,是一个很郁闷的事情。可以手动勾上。(2)、会将选项——文本编辑器——C#——高级——显示实时语义错误、在编辑中用下划线标识错误这两个选项去掉
阅读全文
摘要:使用线程新建窗体项目中需要一个公用的进度条窗体.大家知道在wpf中,有两个线程,一个是UI线程,另一个是监听线程(一直监听用户的输入).如果我们后台有阻塞UI线程的计算存在,那么界面上的比如进度条什么动态的UI都会被因为阻塞而静止不动.所以我的想法就是新起一个线程来负责进度条窗体的显示与关闭,具体实现代码如下: private static Thread th; /// /// 显示进度条 线程 /// /// 进度条界面需要显示的文字 /// 增加进度条存在的延迟时间,单位为毫秒 public sta...
阅读全文
摘要:1. 确保没有任何警告(warnings)。2.如果先执行Code Analysis(启用所有Microsoft Rules)再消除所有警告就更好了。3.去掉所有没有用到的usings。编码过程中去掉多余代码是个好习惯。(参考:msdn)4. 在合理的地方检查对象是否为’null’,避免运行的时候出现Null Reference Exception。5. 始终遵循命名规范。一般而言变量参数使用驼峰命名法,方法名和类名使用Pascal命名法。(参考:msdn)6. 请确保你了解SOLID原则。根据维基百科定义:在程序设计领域,SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗
阅读全文
摘要:/// /// 备注特性 /// public class RemarkAttribute : Attribute { /// /// 备注 /// public string Remark { get; set; } public RemarkAttribute(string remark) { this.Remark = remark; } } /// /// 枚举扩展类 /// public stat...
阅读全文
摘要:上一章我们讲了构造注入与设值注入,这一篇我们主要讲接口注入与特性注入。 接口注入 接口注入是将抽象类型的入口以方法定义在一个接口中,如果客户类型需要获得这个方法,就需要以实现这个接口的方式完成注入。实际上接口注入有很强的侵入性,除了要求客户类型增加前面两种方式所需要的代码外,还必须显示地定义一个新的接口并要求客户类型实现它。 //定义需要注入ITimeProvider的类型...
阅读全文
摘要:背景介绍 在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系,变依赖具体为依赖抽象。平时开发中如果发现客户程序依赖某个或某类对象,我们常常会对他们进行一次抽象,形成抽象的抽象类、接口,这样客户程序就可以摆脱所依赖的具体类型。 这个过程中有个环节被忽略了 谁来选择客户程序需要的满足抽象类
阅读全文
摘要:对象的创建方式,始终代表了软件工业的生产力方向,代表了先进软件技术发展的方向,也代表了广大程序开发者的集体智慧。以new的方式创建,通过工厂方法,利用IoC容器,都以不同的方式实现了活生生实例成员的创生。而本文所关注的Lazy也是干这事儿的。不过,简单说来,Lazy要实现的就是按“需”创建,而不是按时创建。我们往往有这样的情景,一个关联对象的创建需要较大的开销,为了避免在每次运行时创建这种家伙,有一种聪明的办法叫做实现“懒对象”,或者延迟加载。.NET 4.0之前,实现懒对象的机制,需要开发者自己来实现与管理它的定义如下:[Serializable]public class Lazy{ ...
阅读全文
摘要:使用委托可以执行的一项有用操作是实现回调。回调是传入函数的方法,在函数结束执行时调用该方法。 例如,有一个执行一系列数学操作的函数。在调用该函数时,也向其传递一个回调方法,从而在函数完成其计算工作时,调用回调方法,向用户通知计算结果。 同步回调 首先声明两个方法: AddTwoNumbers():接受两个整型实参以及一个类型委托 ResultCallback():接受...
阅读全文
摘要:串行化是指存储和获取磁盘文件、内存或其他地方中的对象。在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原实例区别开来。只需给类添加Serializable属性,就可以实现串行化实的成员。反串行化是串行化的逆过程,数据从存储介质中读取出来,并赋给类的实例变量。串行化能保存现有对象的所有状态,我想我们以前见过的一些游戏的角色账户中的dat文件应该就是被串行化的结果。我尝试了打开一个dat文件,果真得到了我需要的信息,一些角色的等级之类的信息果然在里面。 串行化对象,需要先将对象加上[Serializable],如: [Serializable]...
阅读全文
摘要:在上一篇看到他我一下子就悟了(续)---委托,被人狂喷。说写的太空,没有什么内容之类的。所以准备在这里重写下,不过还是按着以前的方式尽量简单的写。这里我们以打篮球为例。第一步:首先,其他对象订购事件 当发球的球员产生它的发球事件之前,其他球员需要订购这个事件,采用这种方式,只要出现一个发球事件,其他球员就能够知道。第二步:触发事件 当球被发出时,此时发球员对象产生一个新事件。第三步:球产生一个事件 创建一个新事件,这个事件还有一些参数,如球的距离和轨迹。这些参数作为EventArgs对象的一个实例关联到事件,然后事件发出,所有监听对象都能得到这个事件。一旦事件产生,所有订购者都会得到通知,并做
阅读全文
摘要:我们将研究如何创建一个作为Windows服务的应用程序。内容包含什么是Windows服务,如何创建、安装和调试它们。会用到System.ServiceProcess.ServiceBase命名空间的类。什么是Windows服务? Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。 Wi...
阅读全文
摘要:在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数,也不能有返回值。如果希望传递参数给执行函数,则可以使用带参数的ParameterizedThreadStart委托, public delegate void ParameterizedThreadStart(Object obj)可以将要传送给线程函数的信息封装为一个对象,然后调用Thread类的以下构造函数 public Thread (ParameterizedThreadStartstart)启动线程时,向其传送一个参数信息 Thread t...
阅读全文
摘要:C#遍历enum类型对于enum类型:使用foreach遍历enum类型的元素并填充combox foreach ( HatchStyle hs1 in Enum.GetValues(typeof(HatchStyle))) { comboBox1.Items.Add(hs1.ToString()); }获取enum项个数(使用反射) private static int NumberOfEnumValues() { return typeof(TStageEnum).GetFields(B...
阅读全文
摘要:今天在公交车上,突然想属性和字段到底有什么区别?很多字段属性都存在 get{}和set{} 和普通的变量没什么区别(可读可写)我就感觉属性就是给字段一个多的选择方式,有的字段是不允许更改的.. 刚写程序时总觉得一个字段就能满足要求,何必要使用定义起来麻烦的属性要get、set的去定义,代码量还大,真不知道他们的区别和优点例:public class myclass {public static string Aprivate sting _B=""; public string Getval { get { retrun _B ;} set { _B = value; }
阅读全文
摘要:版权所有:不知道http://topic.csdn.net/u/20120315/12/A5BC5453-4333-4182-A4A9-08DC01D04F75.html(从一个论坛看到的) 以下文章都是经典,看不看随你的便,我只希望知识掌握在更多中国人的手里! 中国有很多小朋友,他们18,9岁或21,2岁,通过自学也写了不少代码,他们有的代码写的很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错误的认识和观点左右,缺乏对系统,对程序的整体理解能力,这些人,一个网上的朋友说得很好,他们实际fans,压根没有资格称为程序员,但是据我所知,不少小网络公司的Cfans,拿着吓人的工资..
阅读全文
摘要:从程序集获得类型 先说点题外话,现在技术真的发展太快了。我这边还很多东西半生不熟呢,那边又出现了好多有趣的新东西让你眼红不已。学还是不学这还真是个问题。Node.js 、bootstrap,我最近刚发现的新技术,其实他们已经存在很久了,只是没有接触过而已。昨天晚上看Node.js一下子看到两点多,感觉真是太有意思了^,有兴趣的可以去看看,大家多交流交流. 好了不废话了,在前面的示例中,几乎全部的MyClass信息都是通过反射得到的,但是有一个例外:MyClass类型本身。虽然前面的示例可以动态确定MyClass的信息,但它们仍基于以下事实:事先知道类型名MyClass,并且在typeof语..
阅读全文
摘要:获取Type对象的构造函数: 前一篇因为篇幅问题因为篇幅太短被移除首页,反射这一块还有一篇“怎样在程序集中使用反射”,其他没有什么可以写的了,前两篇主要是铺垫,在实际应用中,主要是最后两篇。其实写完反射,我也考虑重新把委托重新写下,现在想想确实太过单一和简单了。我会把实际开发中委托的例子多写几个, 以便以理解。如果这几篇C#的基础对您有所帮助的话,请点击推荐。谢谢您的支持…… 好了,不废话了,在前面例子中,由于MyClass类型的对象是显示创建的,因此使用反射技术来调用MyClass上的方法没有任何优势--以普通的方式调用对象上的方法会简单的多。但是,如果对象是在运行时动态创建的,反射的...
阅读全文
摘要:使用反射调用方法:一旦知道一个类型所支持的方法,就可以对方法进行调用。调用时,需使用包含在MethodInfo中的Invoke()方法。调用形式:object Invoke(object ob, object[] args)这里ob是一个对象引用,将调用它所指向的对象上的方法。对于静态方法,ob必须为null。所有需要传递给方法的参数都必须在args数组中指定。如果方法不需要参数,则args必须为null。另外,数组args的元素数量参数必须等于参数的数量。Invoke()方法返回被调用方法的返回值。要调用某个方法,只需在一个MethodInfo实例上调用Invoke(),该实例通过调用Get
阅读全文
摘要:反射(reflection)是一种允许用户获得类型信息的C#特性。术语“反射”源自于它的工作方式:Type对象映射它所代表的底层对象。对Type对象进行查询可以获得(反射)与类型相关的信息。反射是一种功能强大的机制,它允许学习和使用只在运行时才能知道的类型功能。 这些是官方定义,其实说白了,反射就是能知道我们未知类型的类型信息这么一个东西.没什么神秘可讲! 反射的核心是System.Type。System.Type包含了很多属性和方法,使用这些属性和方法可以在运行时得到类型信息。一旦得到类型信息,就可以调用其构造函数、方法和属性。因此,反射允许使用编译时不可用的代码。因为反射涉及...
阅读全文