.Net 技术
zhang_ac2
这个作者很懒,什么都没留下…
展开
-
垃圾回收机制
<br />面试被问到了垃圾回收问题,这个方面的知识一直没怎么注意。借鉴了网上一些资料现将该知识罗列一下。<br /> <br /> .net的垃圾回收,借鉴了java的垃圾回收机制。以前winForm程序由于没有垃圾回收机制,程序员往往忘了显示的释放资源,导致资源占用越来越多。最终导致系统的崩溃。有了垃圾回收机制,解决了这一问题。<br /> 1 .Net 垃圾回收的范围<br /> 在.Net中 存在两种变量,值变量和引用变量。 值变量是放在线程栈上的,而引用变量是放在托管堆上的。 .Net原创 2010-06-08 17:22:00 · 376 阅读 · 0 评论 -
定制特性和反射
定制特性可以直接影响代码的运行方式.Net 允许用户在各个数据项上定义特性,也允许用户定义自己的特性.这些特性不会影响编译过程,编译器不能识别他们,但这些特性在应用于程序元素时,可以在编译好的程序集中用作元数据.并通过反射读取他们,使它们在运行时做出决策.即定制特性可以直接影响代码的运行方式.编译器遇见特性时的处理[FieldName("SocialSecurityNumber")]public string SocialSecurityNumber{ //...}编译器发现这个属性有一个特性Field原创 2010-10-31 13:29:00 · 395 阅读 · 0 评论 -
委托的BeginInvoke 和 EndInvoke及构造
<br />1.Delegate 构造<br /> protected Delegate ( Object target, string method)target 类实例,委托对其调用 method 委托表示的实例方法的名称定义一个委托 public delegate void myEventHandler(int i,out string o);CLR为我们做了4件事情<br />1.定义一个构造器<br />2.定义一个虚方法BeginInvoke<br />3.定义一个虚方法En原创 2010-10-29 12:37:00 · 640 阅读 · 0 评论 -
委托和事件
紧耦合<br /> 从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒。但是彼得又不想让老板呆在他的办公室里站在背后盯着他,于是就对老板做出承诺:无论何时,只要我的工作取得了一点进展我都会及时让你知道。彼得通过周期性地使用“带类型的引用”(原文为:“typed reference” 也就是delegate??)“回调”他的老板来实现他的承诺,如下:<br />class Worker {<转载 2010-10-28 14:42:00 · 316 阅读 · 0 评论 -
对泛型的一些理解
<br />看到很多程序员都喜欢用IList作为返回类型:实体类作为参数,泛型参数可以是值类型,也可以是引用类型,ProductInfo可以是其他对象,这我知道,可问题在这,这里放其他类型有意义吗,比如把ProductInfo改成其他的实体类,下面的很多代码还是得改啊,比如 <br />ProductInfo product = new ProductInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rd原创 2010-06-10 14:11:00 · 369 阅读 · 0 评论 -
从此弃IList从List
<br />刚开始接触.net2.0的时候,我是从pet shop4.0看起的。 <br />确实pet shop4.0运用了很精湛的架构设计,也曾一度让我深深迷恋其中。 <br />也是那个时候,我才开始认识IList<T>这个东东,也曾经唯IList<T>是从,非IList<T>不用。 <br />渐渐地,问题来了,首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。 <br />它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的转载 2010-06-10 13:44:00 · 512 阅读 · 0 评论 -
ICollection实现
ICollection 继承自IEnumerable实现的时候需要实现int ICollection.Count bool ICollection.IsSynchronized object ICollection.SyncRoot void ICollection.CopyTo IEnumerat原创 2010-06-10 12:55:00 · 585 阅读 · 0 评论 -
IDictionary与IDictionaryEnumerator
IDictionary 接口是键/值对的非通用集合的基接口。每个元素都是一个存储在 DictionaryEntry 对象中的键/值对。IDictionary 实现有三种类别:只读、固定大小、可变大小。无法修改只读 IDictionary 对象。固定大小的 IDictionary 对象不允许添加或移除元素,但允许修改现有元素。可变大小的 IDictionary 对象允许添加、移除和修改元素。C# 语言中的 foreach 语句(在 Visual Basic 中为 for each)需要集合中每个元素的类型。由原创 2010-06-10 13:18:00 · 4417 阅读 · 2 评论 -
对IComparable,IComparer,IEnumerable,IEnumerator的理解
IComparable接口要实现CompareTo方法,并且一定要通过值可以排序的类型来实现,例如基本数值类型(整型等),或者字符串,看下面的代码可能易懂一点:public class Temperature : IComparable { protected double temperatureF; public int CompareTo(object obj) { if(obj is Temperature) { Temperature oth原创 2010-06-09 15:46:00 · 498 阅读 · 0 评论 -
IComparer 和 IComparable
<br /> 本文分步介绍了两个接口的使用: IComparer 和 IComparable 。 这些接口同一文章中讨论有两个原因而定。 经常一起,用于这些接口,并且尽管接口类似 (并具有类似名称),它们用途不同。<br /> 如果数组类型 (如 字符串 或 整数 ) 已支持 IComparer 可以不提供任何显式引用为 IComparer 排序数组。 在这种情况下该数组的元素会转换为 IComparer ( Comparer.Default ) 的默认实现,为您。 但是,如果想要为自定义的对象转载 2010-06-09 14:55:00 · 951 阅读 · 0 评论 -
getHashCode()
<br />getHashCode() 取值范围是 int.MinValue ~ int.MaxValue<br />它的算法将数字左移动16位,再与原来的数字进行异或操作,最后将结果乘以16进制数15051505<br /> <br />一般用法:<br /> GetHashCode函数一般是在操作HashTable或者Dictionary之类的数据集的时候被调用,其目的是产生一个没有歧义的key。也可以像toString() 或Equals()函数一样重写它。<br /> 对于G原创 2010-06-09 14:36:00 · 2382 阅读 · 1 评论 -
基础
1.System.Collection 类名空间 ArrayList 类 BitArray 类 BitArray类是一个比特数组,数组的大小在创建对象的时候已经确定,每个数据元素只能表示一个比特,元素的值只能是1与0,其中用true表示1,用false表示0,当用其他数据类型的元素初始化该对象时,那么每个元素将占用该类型在内存中存储长度的数组空间。 and(BitArray value) BitArray中的元素执行按位“与”运算 n原创 2010-06-09 13:14:00 · 437 阅读 · 0 评论 -
异步编程
<br />让我们来看看同步异步的区别:<br />同步方法调用在程序继续执行之前需要等待同步方法执行完毕返回结果<br />异步方法则在被调用之后立即返回以便程序在被调用方法完成其任务的同时执行其它操作<br /><br />.NET框架基类库中有好几种类都可以提供同步和异步的方法调用。<br />因为同步方法调用会导致程序流程中途等待,所以采用同步方法的情况下往往会导致程序执行的延迟<br />相比来说,在某些条件下选择异步方法调用就可能更好一些<br />例如,有的时候程序需要给多个Web服务发出请求转载 2010-10-29 13:28:00 · 375 阅读 · 0 评论