摘要:
概述 注册: 注册就是将组件注册到容器,并指定暴露那些服务 默认暴露自身,也可以使用As()暴露其他服务,但请注意, 一旦你将组件暴露为一个特定的服务, 默认的服务 (组件类型) 将被覆盖. 解析: 在注册完组件并暴露相应的服务后, 你可以从容器或其子生命周期中解析服务. 推荐从子声明周期中解析服务 阅读全文
摘要:
前言 在线程执行的地方使用try..catch..捕获不到异常 首先,线程内部不应该出现异常,所以首选处理方式是在Task中使用try..catch..把异常处理掉 Task中可能会抛出多个异常,应该使用AggregateException捕获多线程中所有异常。AggregateException是 阅读全文
摘要:
简介 TaskCompletionSource生成Task的另一种方法.使用TaskCompletionSource很简单,只需要实例化它即可。TaskCompletionSource有一个Task属性,你可以对该属性暴露的task做操作,比如让它wait或者ContinueWith等操作。当然,这 阅读全文
摘要:
简介 Task(任务)可以解决多线程编程中的复杂性。 多线程编程的复杂性 传递数据和返回结果 传递数据倒是没啥问题,只是难以获取到线程的返回值,处理线程的异常也需要技巧。 监控线程的状态 新建新的线程后,如果需要确定新线程在何时完成,需要自旋或阻塞等方式等待。 线程安全 设计时要考虑如果避免死锁、合 阅读全文
摘要:
概念 信号 有时候你需要让线程处于等待状态,直到接收其他线程发来的消息,这就叫发送信号(signaling) 最简单的发送信号的方式就是使用ManualResetEvent。调用它的WaitOne()方法阻塞线程,调用Set()方法开启信号 临界区 一段代码内如果存在对共享资源的多线程读写操作,那么 阅读全文
摘要:
设计模式分类 创建型设计模式 关注对象的创建,new的花样就有很多 单例模式 工厂模式 工厂方法模式 原型模式 建造者模式 结构型设计模式 结构型设计模式关注类与类之间的关系,其实就是折腾组合与继承,(组合优于继承),为程序提供更好的灵活性和扩展性。 结构型设计模式本质是一样的,都是包一层,只不过招 阅读全文
摘要:
数组型: Array:内存连续分配,长度不可变,可索引访问。 ArrayList:早期版本使用,非泛型,类型不安全,如果元素数据类型不同可考虑使用。 List<>:泛型,可变长度,内存连续分配,只要内存是连续分配的都可以使用索引访问。 以上三种数据类型都是内存连续的,所以可以使用索引访问,增删改慢, 阅读全文
摘要:
反射获取泛型类、泛型方法 1 using System; 2 using System.Reflection; 3 4 namespace RFTest 5 { 6 //类ReflectionTest中定义了一个泛型函数DisplayType和泛型类MyGenericClass 7 class Re 阅读全文
摘要:
只是演示反射的用法,使用反射的方式性能不好,可以使用表达式树的方式做对象映射。查看Linq分类里有相关文章 Mapper: public class Mapper { private static ConcurrentDictionary<Type, PropertyInfo[]> PROPTY_C 阅读全文
摘要:
public enum EJobType { 客服 = 1, 业务员 = 2, 财务 = 3, 经理 = 4 } Type jobType = typeof(EJobType); 方式1: Array enumItems = Enum.GetValues(jobType); foreach (var 阅读全文
摘要:
介绍 IEnumerable 提供了可以迭代的能力,而这种能力是通过内部的可迭代对象来实现了,这个对象就是IEnumerator 有了它们,我们不需要将内部集合暴露出去,外界只需要访问我的迭代器接口方法即可遍历数据。 foreach 在C#中,使用foreach语句来遍历集合。foreach语句是微 阅读全文
摘要:
IConvertible接口:定义特定的方法,这些方法将实现引用或值类型的值转换为具有等效值的公共语言运行库类型。 C#中一个很好用的函数是Convert.ChangeType,它允许用户将某个类型转换成其他类型。但是如何你需要转换的对象不是继承自IConvertible接口,那么系统会抛出异常,转 阅读全文
摘要:
C#中,自定义类型,支持比较和排序,需要实现IComparable接口。IComparable接口存在一个名为CompareTo()的方法,接收类型为object的参数表示被比较对象,返回整型值:1表示当前对象大于被比较对象,0表示两者相等,-1表示当前对象小于被比较对象。 IComparable接 阅读全文
摘要:
c#版本 阅读全文
摘要:
Assembly 加载程序集的3中方式 //1.1 Load方法:动态默认加载当前路径下的(bin)下的dll文件,不需要后缀 Assembly assembly = Assembly.Load("DB.SQLServer"); //1.2 LoadFile方法:程序集的绝对路径 Assembly 阅读全文
摘要:
js日志组件~~ 1 function Logger(level) { 2 if (!(this instanceof Logger)) { 3 return new Logger(); 4 } 5 var ERROR = 1; 6 var INFO = 2; 7 var DEBUG = 3; 8 阅读全文
摘要:
上面这段代码中,函数声明在函数调用下,为什么会调用成功呢? hello(); function hello(){alert("hello");} 因为js在编译阶段预解析,将上面这段代码转换成: var hello = function(){alert('hello');}; hello(); 只有 阅读全文
摘要:
当自调用函数需要使用外部变量时,应该作为参数传递给函数,这样函数在访问外部变量时不用进行作用域链查找了 (function(window,jQuery){ //................ })(window,jQuery); 使用单个var,在代码块开头声明变量,防止逻辑混乱、减少代码量 va 阅读全文
摘要:
如果直接使用原型扩展系统函数,可能会和其他人的代码相互冲突 为了防止出现冲突,可以使用如下方法进行扩展: function MyArray(){ this.Name="MyArray"; } MyArray.prototype=[]; var arr =new MyArray(); arr.push 阅读全文
摘要:
平时在写js时应该用面向对象思想将每一组功能封装成一个模块,可实现模块间的高内聚低耦合、重用、结构清晰........... 如果页面中逻辑复杂、功能多,不使用模块封装是不可想象的,维护起来非常复杂。 举个栗子,比如页面中的登录弹窗:封装弹窗代码,外界代码订阅弹窗内的事件(登录、注册...) 1 f 阅读全文
摘要:
.net中StringBuilder的好处不多说了,下面是js版的StringBuilder function StringBuilder() { this.__stringArr__ = []; } $.extend(StringBuilder.prototype, { append: funct 阅读全文
摘要:
要理解闭包首先要知道什么是函数的作用域链 因为有函数的作用域链存在,所以函数无论在哪里调用,函数都可以使用函数外部作用域的变量。 当一个函数被调用时,会创建一个执行环境及相应的作用域链。然后使用arguments和其他命名参数的值来初始化函数的活动对象。此活动对象在当前函数作用域链的第一位,外部函数 阅读全文
摘要:
prototype:每个函数都有一个prototype属性,所有通过相同函数创建的对象都指向同一个prototype对象。 当使用对象的属性和方法时,首先在对象内部查找,如果没有就去原型中查找如果构造函数创建一个对象后修改构造函数的原型,之前创建的对象原型不变如果将prototype直接替换为一个新 阅读全文
摘要:
in: 案例1、遍历对象: for(key in obj) { console.info( key+":"+obj[key]; ) }; 案例2、判断对象中是否有属性: "name" in obj 案例3、判断数组是否有此下标: 3 in ['a','b','c','d'] typeof: type 阅读全文
摘要:
加密重要信息,如用户名、密码。防止http拦截。浏览器使用公钥加密,服务器端使用私钥解密 页面添加引用: jsencrypt.min.js // 3-Url参数加密类 if (window.JSEncrypt) { function InitJSEncrypt() { var _this = thi 阅读全文