北外英语专业超全面翻译笔记PDF下载

今天在网上看到的。就自己制作了一下pdf版本。方便大家。现在比较纠结的是没有一个好网盘。115竟然需要登录才能下载了。。刚才试了下。。更可怕的是,,只有绑定了手机才能分享。霖枫叔疯了么。。 那还是将就着用华为的吧。其实我也不喜欢华为的。。 下载地址:北外英语专业超全面翻译笔记

WPF实现控件拖动效果

首先很简单,当然是去添加两个控件了,这里我添加了两个控件,都是label,然后我想实现的是将label1拖动到label2上的时候,label1的内容会被复制到label2上。 需要注意的代码是label1中的MouseDown事件。和label2中的AllowDrop =“True” Drop=“tagert_drop” 然后对应的处理事件 其他的效果可以仿照这个来做。比如拖动以后的效果可以DragDropEffects来设置。。

DevExpress DXperience Universal 12.1.5 破解补丁

因为要用到wpf开发软件,而作为一个审美能力和制作美的能力完全不匹配的人。。需要有一个基本的主题框架来作为基础进行开发。。于是我找了找。。刚开始找的是http://www.telerik.com/这个商业库,不过这个用的不太顺手,于是还是试试DevExpress,,果断很不错,找到了破解补丁。 给一个官方的Demo示例图: 安装文件:DXperience-12.1.5安装包 帮助文档:DXperience 12.1.5 Universal 帮助文档: 破解补丁:DevExpress.Registration.Setup.v12.1.5.E3.msi

未能加载文件或程序集“App_Web_xxxx”

今天在用WCF写服务的时候,服务一直连不上,直接查看svc文件,发现如下错误 未能加载文件或程序集“‘App_Web_****, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",****是一个随机字符串。 解决方法中:  在web.config里配置成这样子:  就好了。中午和下午一直在搞javascript连接WCF的demo,总算是晚上搞定了,,还是老样子,,最大的体会就是很多东西就是看着简单,写起来会有各种各样的问题,比如这次,即使照着微软的官方文档来,也会有错误。动手才是王道,不管做什么。这几天忙完了,写篇文章出来。  最后分享一下微软官方的WCF与Ajax开发实践系列课程,我只能说WCF这东西没有哪一本书比微软官方的技术培训讲的更好了,非常建议学习。  武汉最近下雨了,天气挺凉爽,过几天准备回家吧。。

SQLServer超时时间已到解决和一套控件库

在最近的一个程序中,因为频繁的操作数据库,莫名的出现了如下的错误:  超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。  说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。  异常详细信息: System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。  按理说这应该是没有关闭数据库连接或者dataset,可是查了一下。发现都关了啊。遂可以表述为原因不明,但是通过在数据库连接字符串中添加max pool size=512 这个数字可以自己设。就可以了  这篇文章短是短了点。。好吧。那顺带分享一套非常精美的C#控件。 RadControls-For-WinForms 控件2012 RadControls-for-WPF控件2012

SQLServer启用xp_cmdshell

忘了当时是执行哪条命令的时候需要启动xp_cmdshell了。。反正是必须用的。。 默认情况下,sql server安装完后,xp_cmdshell是禁用的(可能是安全考虑),如果要使用它,可按以下步骤  

C# 线程优秀文章汇总

最近在看线程的东西,整理一些文档以便学习。分享。 刚刚 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习(五) 多线程的自动管理(定时器) C#多线程学习(六) 互斥对象 C# 实现多线程的同步方法详解 JimmyZheng C# 温故而知新: 线程篇(一) Thread C# 温故而知新: 线程篇(二) 线程池和异步线程 zhoufoxcn C#多线程编程(1):线程的启动 多线程编程(2):线程的同步 多线程编程(3):线程池ThreadPool 多线程编程(4):多线程与UI操作 一个简单的C#多线程间同步的例子 老赵 浅谈线程池(上):线程池的作用及CLR线程池 浅谈线程池(中):独立线程池的作用及IO线程池 浅谈线程池(下):相关试验及注意事项 bloodish C# Tip – 如何优雅的控制线程状态 Autumoon 白话多线程

C#中的Array和ArrayList

数组是最基础的数据结构。ArrayList可以看作是Array的复杂版本。下面比较两者的异同 比较: 相同点: Array和ArrayList均实现了相同的接口,因此具有许多相同的操作方法,例如对自身进行枚举,能够以foreach语句遍历。 Array和ArrayList创建的对象均保存在托管堆中。 不同点: Array只能存储同构对象,当然,声明为Object类型的数组除外,因为任何类型都可以隐式转换成Object类型。ArrayList可以存储异构对象,这是因为本质上ArrayList内部维护着一个object[] items类型的字段,在应用ArrayList时,应该考虑装箱和拆箱所带来的性能损失。一般情况下,Array的性能高于ArrayList。 Array可以是一维的,也可以是多维的,而ArrayList只能是一维的。 Array的容量是固定的。一旦声明,不可更改,而ArrayList容量动态增加,当添加元素超过初始容量时,ArrayList会根据需要重新分配。而且可以通过TrimToSize删除空项来压缩体积。其实,除了Array外,其他集合类都是可以动态增加的。 Array的下限可以设置,而ArrayList下限只能是0. Array只有简单的方法来获取或设置元素值,不能随意增加或删除数组元素,而ArrayList提供了更多的方法来操作元素,可以方便的插入或删除指定位置上的元素。一般可以用ArrayList代替Array. tip:List泛型类对应于ArrayList。

C#中的抽象类和接口

本文同样是笔记整理,手动输入一遍和看书的感觉还是很不一样的。文章非常好,讲的很清楚。 什么是接口?  接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员。一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。 什么是抽象类?  抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。另外,实现抽象方法由override方法来实现。 比较 相同点 都不能被直接实例化,都可以通过继承实现其抽象方法。 都是面向抽象编程的技术基础,实现了诸多的设计模式。 不同点 接口支持多继承;抽象类不能实现多继承。 接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。 接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。 接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。 接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。 接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。 规则与场合 请记住,面向对象思想的一个最重要的原则就是:面向接口编程。 借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,精髓就是面向抽象编程,通过封装变化来实现实体之间的关系。 抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。 接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系; 接口多定义对象的行为;抽象类多定义对象的属性; 接口定义可以使用public、protected、internal 和private修饰符,但是几乎所有的接口都定义为public,另外方法的访问级别不能低于接口的访问级别,否则可能导致编译错误。 “接口不变”,是应该考虑的重要因素。所以,在由接口增加扩展时,应该增加新的接口,而不能更改现有接口。 尽量将接口设计成功能单一的功能块,以.NET Framework为例,IDisposable、IDisposable、IComparable、IEquatable、IEnumerable等都只包含一个公共方法。 接口名称前面的大写字母“I”是一个约定,正如字段名以下划线开头一样,请坚持这些原则。 在接口中,所有的方法都默认为public。 如果预计会出现版本问题,可以创建“抽象类”。而向接口中添加新成员则会强制要求修改所有派生类,并重新编译,所以版本式的问题最好以抽象类来实现。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。 对抽象类不能使用new关键字,也不能被密封,原因是抽象类不能被实例化。 在抽象方法声明中不能使用 static 或 virtual 修饰符。 最后还是要勤于键盘,才能深入理解啊。 参考:对抽象编程:接口和抽象类  

C#中的字符串驻留

字符串string可以理解为char[],他是一个引用类型。 字符串创建 操作上类似于int,char等类型,直接进行赋值,string str=“bystander”;虽然string 是个类,但是如果你天真的使用 来构造,会导致一个编译错误。因为System.String只提供了数个接受Char*,Char[]类型参数的构造函数。 所以只能像下面这样使用, 看出来了吧,很麻烦的。所以一般还是使用第一种。 字符串恒定性 恒定性(Immutability),是指字符串一经创建,就不可改变,这是String最为重要的特性之一。具体来说,就是字符串一旦创建,就会在托管堆上分配一块连续的内存空间,我们对其的任何改变都不会影响到原有的String对象,而是重新创建的新的String对象。类似Insert,Substring,ToUpper都只是创建出了新的临时的字符串,会成为下次垃圾回收的目标。 好处: 保证了对String对象的任何操作不会改变源字符串。 恒定性还意味着操作字符串不会出现线程同步问题 恒定性一定程度上,成就了字符串驻留。 字符串驻留 CLR维护一个表来存放字符串,该表叫做拘留表(或驻留池),他包含程序上以编程方式声明或创建的每一个唯一的字符串的引用,因此具有特定值的实例在系统中只有一个。如果将同一个字符串分配给多个变量,那么CLR就会向拘留池检索相同引用,并分配给变量。 通过下面这个例子来说明: 猜猜答案是什么。。 正确答案是:True,False,True 为什么不是我们通常认为的那样呢。这就是因为字符串驻留了 缘起 String类型的特性恒定性,对字符串的任何操作都只会创建新的字符串,这会导致性能下降,而String又用的很频繁,为此,CLR使用字符串驻留来解决这一问题。为此,CLR内部维护一个哈希表,来管理其创建的大部分string对象。其中Key为string本身,Value为分配给对应的string的内存地址。 细节  CLR初始化时,创建一个空的哈希表,当JIT编译方法的时候,会首先在哈希表中查找每一个字符串常量,显然找不到任何"bystander"变量,因此会在托管堆中创建一个新的string对系那个strA,并更新哈希表,Key被赋值为"bystander",Value被赋值为strA的引用.也就是Value内保留了"bystander"在托管堆中的引用地址.  接着,JIT根据"bystander"查找哈希表,结果找到了,所以JIT不做操作,只把找到的key对应的Value值赋给了strB对象.因此,第一个输出为true,引用相等.  同样,JIT向哈希表中添加了Key为"by",Value为托管堆上"by"的地址.返回strC对象.但是注意,strD不同,JIT不检测,因为strD他是动态生成的.这样的字符串不会被添加到哈希表中进行维护,而是在托管堆中直接分配,所以第二个Console输出False.  对于第三个,我们首先看看Intern方法和IsInterned方法,对于动态生成的字符串,因为没有添加到CLR维护的哈希表,所以字符串驻留机制对其失效,但是可以手工开启,来实现高效的比较字符串相等.  两者的机制都是去哈希表中查找是否存在str字符串,找到的话也都返回对str的引用,不同的是当哈希表中没有str的话,IsInterned返回null,而Intern将把这个字符串添加到哈希表,并返回引用.注意,IsInterned返回非null并不代表两个字符串引用了相同的地址. 所以 就很好理解了.