随笔分类 -  积累

摘要:本文将介绍以下内容:什么是继承?继承的实现本质1. 引言关于继承,你是否驾熟就轻,关于继承,你是否了如指掌。本文不讨论继承的基本概念,我们回归本质,从编译器运行的角度来揭示.NET继承中的运行本源,来发现子类对象是如何实现了对父类成员与方法的继承,以最为简陋的示例来揭示继承的实质,阐述继承机制是如何被执行的,这对于更好的理解继承,是必要且必然的。2. 分析下面首先以一个简单的动物继承体系为例,来进行说明: public abstract class Animal { public abstract void ShowType(); public void... 阅读全文
posted @ 2012-09-29 16:36 沙耶 编辑
摘要:本文将介绍以下内容:·IL代码分析方法·IL命令解析·.NET学习方法论1.引言自从『你必须知道.NET』系列开篇以来,受到大家很多的关注和支持,给予了anytao巨大的鼓励和动力。俱往昔,我发现很多的园友都把目光和焦点注意在如何理解IL代码这个问题上。对我来说,这真是个莫大的好消息,因为很明显我们的思路慢慢的从应用向底层发生着转变,技巧性的东西是一个方面的积累,底层的探索在我认为也是必不可少的修炼。如果我们选择了来关注这项修炼,那么我们就应该选择如何来着手这项修炼,首先关注anytao的『你必须知道的.NET』系列可以给你提供一个捷径,少花一些功夫;其次对大师级 阅读全文
posted @ 2012-09-29 09:50 沙耶 编辑
摘要:本文将介绍以下内容:IL代码分析方法Hello, world历史.NET学习方法论1.引言1988年Brian W. Kernighan和Dennis M. Ritchie合著了软件史上的经典巨著《The C programming Language》,我推荐所有的程序人都有机会重温这本历史上的经典之作。从那时起,Hello, world示例就作为了几乎所有实践型程序设计书籍的开篇代码,一直延续至今,除了表达对巨人与历史的尊重,本文也以Hello, world示例作为我们扣开IL语言的起点,开始我们循序渐进的IL认识之旅。2. 从Hello, world开始首先,当然是展示我们的Hello, 阅读全文
posted @ 2012-09-29 09:30 沙耶 编辑
摘要:本文将介绍以下内容:按值传递与按引用传递深论ref和out比较参数应用浅析接上篇继续,『第十一回:参数之惑---传递的艺术(上)』4.2 引用类型参数的按值传递当传递的参数为引用类型时,传递和操作的是指向对象的引用,这意味着方法操作可以改变原来的对象,但是值得思考的是该引用或者说指针本身还是按值传递的。因此,我们在此必须清楚的了解以下两个最根本的问题:引用类型参数的按值传递和按引用传递的区别?string类型作为特殊的引用类型,在按值传递时表现的特殊性又如何解释?首先,我们从基本的理解入手来了解引用类型参数按值传递的本质所在,简单的说对象作为参数传递时,执行的是对对象地址的拷贝,操作的是该拷贝 阅读全文
posted @ 2012-09-29 09:05 沙耶 编辑
摘要:本文将介绍以下内容:按值传递与按引用传递深论ref和out比较参数应用浅析1.引言接上回《第九回:品味类型---值类型与引用类型(中)-规则无边》中,对值类型和引用类型的讨论,其中关于string类型的参数传递示例和解释,引起园友的关注和讨论,可谓一石激起千层浪。受教于装配脑袋的深切指正,对这一概念有了相当进一步的了解,事实证明是我错了,在此向朋友们致歉,同时非常感谢大家的参与,尤其是装配脑袋的不倦相告。因此,本文就以更为清晰的角度,把我理解有误的雷区作做以深入的讨论与分析,希望通过我的一点点努力和探讨至少对如下几个问题能有清晰的概念:什么是按值传递?什么是按引用传递?按引用传递和按引用类型参 阅读全文
posted @ 2012-09-28 16:42 沙耶 编辑
摘要:本文将介绍以下内容:类型的基本概念值类型深入引用类型深入值类型与引用类型的比较及应用[下载]:[类型示例代码]1.引言值类型与引用类型的话题经过了两个回合([第八回:品味类型---值类型与引用类型(上)-内存有理]和[第九回:品味类型---值类型与引用类型(中)-规则无边])的讨论和切磋,我们就基本的理解层面来说已经差不多了,但是对这一部分的进一步把握和更深刻的理解还要继续和深化,因为我自己就在两篇发布之际,我就得到装配脑袋兄的不倦指导,之后又查阅了很多的资料发现类型在.NET或者说语言基础中何其重要的内涵和深度,因此关于这个话题的讨论还没有停止,以后我将继续分享自己的所得与所感。不过作为一个 阅读全文
posted @ 2012-09-28 15:51 沙耶 编辑
摘要:接上回[第八回:品味类型---值类型与引用类型(上)-内存有理]的探讨,继续我们关注值类型和引用类型的话题。本文将介绍以下内容:类型的基本概念值类型深入引用类型深入值类型与引用类型的比较及应用1.引言上回[第八回:品味类型---值类型与引用类型(上)-内存有理]的发布,受到大家的不少关注,我们从内存的角度了解了值类型和引用类型的所以然,留下的任务当然是如何应用类型的不同特点在系统设计、性能优化等方面发挥其作用。因此,本回是对上回有力的补充,同时应朋友的希望,我们尽力从内存调试的角度来着眼一些设计的分析,这样就有助于对这一主题进行透彻和全面的理解,当然这也是下一回的重点。从内存角度来讨论值类型和 阅读全文
posted @ 2012-09-28 11:22 沙耶 编辑
摘要:本文将介绍以下内容:类型的基本概念值类型深入引用类型深入值类型与引用类型的比较及应用1.引言买了新本本,忙了好几天系统,终于开始了对值类型和引用类型做个全面的讲述了,本系列开篇之时就是因为想写这个主题,才有了写个系列的想法。所以对值类型和引用类型的分析,是我最想成文的一篇,其原因是过去的学习过程中我就是从这个主题开始,喜欢以IL语言来分析执行,也喜好从底层的过程来深入了解。这对我来说,似乎是一件找到了有效提高的方法,所以想写的冲动就没有停过,旨在以有效的方式来分享所得。同时,我也认为,对值类型和引用类型的把握,是理解语言基础环节的关键主题,有必要花力气来了解和深入。2. 一切从内存开始2.1 阅读全文
posted @ 2012-09-28 10:11 沙耶 编辑
摘要:本文将介绍以下内容:.NET基础架构概念类型基础通用类型系统CLI、CTS、CLS的关系简述1.引言本文不是连环画,之所以在开篇以图形的形式来展示本文主题,其实就是想更加特别的强调这几个概念的重要性和关注度,同时希望从剖析其关系和联系的角度来讲述.NET Framework背后的故事。因为,在作者看来想要深入的了解.NET,必须首先从了解类型开始,因为CLR技术就是基于类型而展开的。而了解类型则有必要把焦点放在.NET类型体系的公共基础架构上,这就是:通用类型系统(Common Type System, CTS)。我之所以将最基本的内容以独立的章节来大加笔墨,除了为后面几篇关于对类型这一话题深 阅读全文
posted @ 2012-09-28 09:51 沙耶 编辑
摘要:本文将介绍以下内容:面向对象基本概念base关键字深入浅出this关键字深入浅出1.引言new关键字引起了大家的不少关注,尤其感谢Anders Liu的补充,让我感觉博客园赋予的交流平台真的无所不在。所以,我们就有必要继续这个话题,把我认为最值得关注的关键字开展下去,本文的重点是访问关键字(Access Keywords):base和this。虽然访问关键字不是很难理解的话题,我们还是有可以深入讨论的地方来理清思路。还是老办法,我的问题先列出来,您是否做好了准备。是否可以在静态方法中使用base和this,为什么?base常用于哪些方面?this常用于哪些方面?可以base访问基类的一切成员吗 阅读全文
posted @ 2012-09-28 09:39 沙耶 编辑
摘要:本文将介绍以下内容:面向对象基本概念new关键字深入浅出对象创建的内存管理1.引言园子里好像没有或者很少把new关键字拿出来说的,那我就占个先机吧,呵呵。那么,我们到底有必要将一个关键字拿出来长篇大论吗?看来是个问题。回答的关键是:你真的理解了new吗?如果是,那请不要浪费时间,如果不是,那请继续本文的循序之旅。下面几个 问题可以大概的考察你对new的掌握,开篇之前,希望大家做个检验,如果通过了,直接关掉本页即可。如果没有通过,希望本文的阐述能帮你找出答案。new一个class对象和new一个struct或者enum有什么不同?new在.NET中有几个用途,除了创建对象实例,还能做什么?new 阅读全文
posted @ 2012-09-28 09:20 沙耶 编辑
摘要:本文将介绍以下内容:• 面向对象基本概念• 类和结构体简介•引用类型和值类型区别1.引言提起class和struct,我们首先的感觉是语法几乎相同,待遇却翻天复地。历史将接力棒由面向过程编程传到面向对象编程,class和struct也背负着各自的命运前行。在我认为,struct英雄迟暮,class天下独行,最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别。由此产生的一系列差异性,本文将做以全面讨论。2. 基本概念2.1. 什么是class?class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段、属性、方法、属性、构造函数、索引 阅读全文
posted @ 2012-09-28 09:00 沙耶 编辑
摘要:本文将介绍以下内容:• 定制特性的基本概念和用法• 属性与特性的区别比较• 反射的简单介绍1.引言attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间来了解本文的内容,走进一个发现attribute登堂入室的入口。因为.NET Framework中使用了大量的定制特性来完成代码约定,[Serializable]、[Flags]、[DllImport]、[AttributeUsage]这些的构造,相信我们都见过吧,那么你是否了解其背后的技术。提起特性,由于高级语言发展的历史原因,不免让人想起另一个耳熟能详的名字:属性。特性和属性,往往给初学者或者从C++转移到C#的人混淆的 阅读全文
posted @ 2012-09-27 16:56 沙耶 编辑
摘要:本文将介绍以下内容:• 面向对象思想:多态• 接口• 抽象类1.引言在我之前的一篇post《抽象类和接口的谁是谁非》中,和同事管伟的讨论,得到很多朋友的关注,因为是不成体系的论道,所以给大家了解造成不便,同时关于这个主题的系统性理论,我认为也有必要做以总结,因此才有了本篇的新鲜出炉。同时,我将把上贴中的问题顺便也在此做以交代。2. 概念引入什么是接口?接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员。一个类可以实现多个接口,当 阅读全文
posted @ 2012-09-27 14:07 沙耶 编辑
摘要:本文将介绍以下内容:• 类型转换• is/as操作符小议1.引言类型安全是.NET设计之初重点考虑的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题。现在,这一切已经在微软大牛们的设计框架中为你解决了。在.NET中,一切类型都必须集成自System.Object类型,因此我们可以很容易的获得对象的准确类型,方法是:GetType()方法。那么.NET中的类型转换,应该考虑的地方有那些呢?2. 概念引入类型转换包括显示转换和隐式转换,在.NET中类型转换的基本规则如下:任何类型都可以安全的转换为其基类类型,可以由隐式转换来完成;任何类型转换为其派生类型时,必须进行显 阅读全文
posted @ 2012-09-27 12:32 沙耶 编辑
摘要:1.引言最近常常为学习中的问题而伤神,幸有管伟一起常常就技术问题拿来讨论,我已想将讨论的内容以基本原貌的方式,形成一个系列[和管子对话],通过记录的方式将曾经的友情和激情记录在园子里,除了勉励自己,也可受用他人。因此[和管子对话]系列,纯属口头之说,一家之言,而且东拉西撤。但是却给我一个很好的启示,就是将学习的东西,尤其是基础性的本质作为系统来常常回味在脑子里,案头间。所以才有了这个系统[你必须知道的.NET]浮出水面,系列的主要内容就是.NET技术中的精华要点,以基础内容为主,以设计思想为辅,有自己的体会,有拿来的精品,初步的思路就是以实例来讲述概念,以简单来表达本质。因为是总结,因为是探索 阅读全文
posted @ 2012-09-27 12:01 沙耶 编辑
摘要:五、IIS寄宿1、在解决方案资源管理器中,鼠标右击解决方案“MySolution“,选择:添加→新建网站→WCF服务,出现如下窗体:点击“确定”按钮,创建完毕。界面如下所示:2、删除自动生成的“IService.cs”和“Service.cs”。3、鼠标右击网站项目,选择“添加引用”,出现如下窗体:选择“服务层”类库,确定即可。目前网站项目的结构如下:4、双击“Service.svc”打开该文件进行修改,修改后的文件如下所示:<%@ ServiceHost Language="C#" Debug="true" Service="服务层.M 阅读全文
posted @ 2012-09-20 15:23 沙耶 编辑
摘要:这个例子表示层采用WinForm;业务逻辑层直接写在了WCF服务中,当然最好是把服务层和业务逻辑层进行分离,因为本实例比较简单,就直接把业务逻辑层写在了服务层中;数据访问层采用ADO.NET技术;后台数据库使用SQL Server 2005。一、数据库设计1、我们设计一个简单的用户表(Users),如下:序号列名数据类型为空性主键外键默认值界面字段说明1idint否是否否id号(种子)2userNamenvarchar(20)否否否是用户名3loginPasswordnvarchar(30)否否否是用户密码4memonvarchar(50)是否否是备注2、配置SQL Server 2005.. 阅读全文
posted @ 2012-09-20 14:54 沙耶 编辑
摘要:1.为每一个单元格制定一个tooptip提示,当鼠标移到单元格时,自动弹出提示框。界面如下:1,代码如下, 先设置鼠标移到单元格的行号和列号:public partial class DataGridViewMerge : Form{ private int CellColumnIndex { get; set; } private int CellRowIndex { get; set; }} 设置鼠标进入单元格显示tooltip工具窗口。如下:private void dgv1_CellMouseEnter(object sender, DataGridVi... 阅读全文
posted @ 2012-09-19 17:31 沙耶 编辑
摘要:/// <summary> /// 给datagridview添加鼠标滚轮事件 /// </summary> /// <param name="dataGridView1"></param> public static void bindMouseWheel(System.Windows.Forms.DataGridView dataGridView1) { dataGridView1.MouseWheel += new System.Windows.Forms.MouseEventHa... 阅读全文
posted @ 2012-09-19 17:24 沙耶 编辑