11 2013 档案

摘要:创建对象的时候会调用构造函数初始化实例信息,当然析构函数就是释放对象时做的一些释放操作。为什么需要析构函数,普遍来说,因为我们的对象中可能用到了一些非托管的代码,譬如数据库操作,网络,本地文件等等,这些资源不是托管的,所以需要我们的托管对象在销毁时同事释放那些之前使用到的非托管对象,否则一直未关闭,释放,就可能导致泄漏。如果你的对象中根本没用到这些非托管资源,那么请不要定义析构函数,毕竟有代价的。1、析构函数被编译后,实际变成了Finalize()方法,所以实际上C#中也不允许你自己定义一个Finalize方法2、.NET中的托管对象回收,都是通过垃圾回收机制来实现的,不用我们手动就释放。当C 阅读全文
posted @ 2013-11-24 15:13 自由小菜园 阅读(480) 评论(0) 推荐(0)
摘要:委托时一种特殊的类型,它用来保存方法的地址,这样我们很方便的调用方法,像变量一样传递,回调。C++中的函数指针也是保存方法的地址,但是有一点不一样的是定义委托的时候就知道了它里面可以保存什么样的方法,而函数指针就没有这些所以委托相对更明确一点,更安全一点。public delegate void MyDelegate(int x) //这样的委托类型表示,该委托可以用来保存无返回值,切参数为int类型的方法当然当我们写出上面那段代码的时候,实际上编译器做了其他一些事,实际可能定义像下面这样的public class MyDelegate:system.MusticastDelegate{ .. 阅读全文
posted @ 2013-11-24 14:25 自由小菜园 阅读(2104) 评论(0) 推荐(0)
摘要:当我们定义一个事件的时候,默认会多出两个方法,分别是添加,和删除的方法譬如public event EventHander myEvent //我定义了这么一个事件//那么实际上IL中会多出2个方法,大概是下面这样的private event EventHander myEvent;// 原来的public 变为privatepublic void add_myEvent(EventHander value){ myEvent = (EventHander)Delegate.Combine(myEvent,value)}public void remove_myEvent(EventH... 阅读全文
posted @ 2013-11-21 00:12 自由小菜园 阅读(382) 评论(0) 推荐(0)
摘要:两个自定义的类别,通常不允许相加,不过我们可以重载+号操作符来方便其相加 class Program { static void Main(string[] args) { A a = new A(); a.x = 1; B b = new B(); b.y = 2; A c = a + b;//因为重载了加号操作符,所以这里可以直接相加 Console.WriteLine(c.x);//4 ... 阅读全文
posted @ 2013-11-20 21:06 自由小菜园 阅读(276) 评论(0) 推荐(0)
摘要:.NET中的任何类型,都有对应的一个类型对象。类型对象和类型实例(类型创建的一个对象)不是同一个概念。类型对象包含类型的静态字段和方法,当类访问静态方法静态字段,实例调用方法时就会去类型对象中查找静态字段和方法假设有一个类型叫Animal 那么当我们使用它之前CLR就会创建一个特殊的对象叫类型对象Animal a1 = new Animal();a1.Eat() //这里访问Eat方法,会先去Animal的类型对象中查找Eat方法, //如果之前还没有调用过该方法,那么会先将Eat方法编译成本机代码(已经编译过就不用了)Animal.Search("老虎") //这边访问. 阅读全文
posted @ 2013-11-18 22:46 自由小菜园 阅读(566) 评论(0) 推荐(0)