随笔分类 - .net
摘要:在C#中 一个类 有静态构造函数,在首次实例化该类或任何的静态成员被引用时,.NET自动调用静态构造函数来初始化该类。注意是“首次”,即继续实例化该类时,不会调用该类的静态构造函数。 看代码: 查看运行结果:
阅读全文
摘要:ASP.NET中ConcurrentDictionary是.Net4 增加的,与 Dictionary 最主要区别是, 前者是线程安全的集合,可以由多个线程同时并发读写Key-value。 那么 什么是线程安全?线程安全和非线程安全有什么区别?分别在什么情况下使用? 什么是线程安全 ? 线程安全就是
阅读全文
摘要:延迟初始化 就是在第一次使用的时候在 进行类的初始化 输出: Student isn't init! Student is init... DefaultName Tom 他是在输出Name属性时才进行初始化的,也就是在第一次使用时才实例化,这样就可以减少不必要的开销。
阅读全文
摘要:1. Task (任务): 很容易调用 ThreadPool.QueueUserWorkItem 实现异步操作,但是这个技术有许多 .net 引入Task类型来使用任务。 如下几种方式都是实现异步的方法: a. 为了创建一个Task,需要调用构造器并传递一个Action 或 Action<Objec
阅读全文
摘要:1. ThreadPool 线程池异步: //public static bool QueueUserWorkItem(WaitCallback callBack); //public static bool QueueUserWorkItem(WaitCallback callBack, obje
阅读全文
摘要:.net 序列化创建对象的深拷贝 序列化可以将多个对象图序列化到一个流中, 在反序列化时按顺序取出即可。 控制序列化反序列化: 有时我们希望类型中有些属性或者字段不被序列化:通过 NonSerialized特性来控制: [NonSerialized] private double m_area; O
阅读全文
摘要:一. 程序集的加载: 在CLR内部使用System.Reflection.Assembly类的静态LoadFrom方法尝试加载程序集。 LoadFrom方法在内部调用Assembly的Load方法,将AssemblyName对象传给它,然后CLR应用版本绑定从定向策略,并在各个位置查询匹配的程序集。
阅读全文
摘要:Lock关键字 C#提供lock关键字实现临界区,MSDN里给出的用法: Object thisLock = new Object();lock (thisLock){ // Critical code section} 还有一种是比lock更“高级”的Monitor:
阅读全文
摘要:1. 不需要构造委托对象 ThreadPool.QueueUserWorkItem:通过线程池 2. 不需要定义回调方法(lambda 表达式): 3. 局部变量不需要手动包装到类中即可传给回调方法。
阅读全文
摘要:lowerBounds {2005,1} 表示 一个二维的 下限 是 2005 跟1 开始, lengths {5,4} 表示 2005 维数增长4个 也就是 2005-2009 , 1 维数增长4个 也就是 1-4 然后通过 Array.CreateInstance 创建二维数组。 如下代码 //
阅读全文
摘要:1. 字符: 在.net中 字符是表示成16为Unicode代码值。每个字符都是System.Char结构(一个值类型)的实例。 使用以下三种技术实现各种值类型与Char实例的互换。 a.转型(强制类型转换) b.使用Convert类型 c.使用IConvertible接口 2. System.St
阅读全文
摘要:通常定义事件 都是通过自定义委托的方式来实现, 今天使用EventHandler 委托来定义事件:
阅读全文
摘要:public class IndexTempte { public ArrayList nameList = new ArrayList(); public string this[int index] { get { return nameList[...
阅读全文
摘要:.net 4.0 引入了 Tuple特性: 在C# 4.0之前我们函数有多个返回值,通常是使用ref,out 。到了c# 4.0 应当使用元组Tuple而不是使用输出参数,在任何时候都应避免使用ref/out传递参数,尤其对引用类型(禁止引用的引用,尝试改进你的设计。 数组合并了相同类型的对象,而元
阅读全文
摘要:可选参数,可以为方法的参数设置默认值,在调用方法的时候,如果不传递参数,就是执行默认参数。 如果参数要求 ref/out,为了以传参数名的方式传递实参,可以使用如下方法:
阅读全文
摘要:C# 编译器对静态类进行了如下限制。 1. 静态类必须直接从System.Object派生,从其他任何基类生都没有意义,继承只适用于对象,而你不能创建静态类的实例。 2. 静态类不能实现任何接口,这是因为只有使用类的实例时,才可以调用类的的接口方法, 而静态类是不能被实例化的。 3. 静态类只能定义
阅读全文