随笔分类 -  C#.net

摘要:WCF是对于Webservice,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合。那么他与Remoting和Webservice有什么关系呢?既然他是对Remoting,Webservice等技术的整合,那么我们先来看一下Remoting,Webservice的架构,下图是 Remoting的架构图,实际上Webservice和Remoting差不多,也是这样的架构,只是少了些东西,再后面我们会讲解,先来看一下图:我们先来讲解Remoting:1.远程处理对象(MBR):由于Remoting传递的对象是以引用的方式,因此所传递的远程对象类必须继承 阅读全文
posted @ 2011-10-17 18:32 hanmos 阅读(435) 评论(0) 推荐(0) 编辑
摘要:WPF可以认为是MS利用原有.NET框架的一些特色,加上DirextX的产物。将原有的编程模型统一化.我们来看看WPF的运行机制.那么我们现在来分析一下WPF的运行过程吧。首先从第一个方块说起:WPF的进程会加载四个程序集,Kernel,User32,DirectX,milcore.他们对原有的CLR进行了扩 展。我们看看他们分别起什么作用。Kernel,它负责控制和管理与图形驱动相关的最底层任务等。在Kernel之后也是两个比较底层的模块。其 中,User32负责确定显示窗口及其在屏幕中的位置状态等,其并不参与常见控件的呈现。DirectX负责呈现窗口和内容等。milcore是WPF的 核心 阅读全文
posted @ 2011-10-17 18:31 hanmos 阅读(325) 评论(0) 推荐(0) 编辑
摘要:当服务器(ASP.NET)接收到一个 Http请求的时候,他会如何工作呢?还是老思路,我们先来看图:这个图和上一篇中的图,基本上是一样的(为了便于学习和记忆,我将一些不太重要的东西去掉了).那么我们现在来分析一下ASP.NET的运行过程吧。首先从第一个方块说起:启动IIS进程,对于IIS来说,它依赖一个叫做 HTTP.SYS 的内置驱动程序来监听来自外部的 HTTP请求。在操作系统启动的时候,IIS首先在HTTP.SYS中注册自己的虚拟路径。实际上相当于告诉HTTP.SYS哪些URL是可以访问的,哪 些是不可以访问的。 第二个方块:在CLR挑选好了要加载Mscorewk.dll还是Mscor. 阅读全文
posted @ 2011-10-17 18:31 hanmos 阅读(306) 评论(0) 推荐(0) 编辑
摘要:上面一篇,对system.Reflection做了初步的研究,本来这篇开始要讲解Winform应用程序的流程框架,可是突然想到还有XML这个东西没有讲解,只好这篇补上了,下篇再讲应用程序吧,失误,请原谅!XML是一种标记语言,就应该有一种工具按一定的语法来分析和理解存储在文档中信息。这个工具就是XML分析器---一个组件用于读标记文本并返回指定平台的对象。.NET 框架支持两种不同的分析模式:XMLDOM分析器和XML阅写器。我们来看图1.读写器:它的工作方式类似于数据库的游标。XML阅读器的客户端收到一个指向阅读器实例的引用。该实例提取底层的数据流并把取出的数据呈现为一棵XML树。阅读器类提 阅读全文
posted @ 2011-10-17 18:30 hanmos 阅读(364) 评论(0) 推荐(0) 编辑
摘要:ADO.net类库有两种完全不同的方式来实现数据访问:连接式和断开式.ADO.NET没有提供单一的方式和不同的数据库进行通信,而是提供了多种数据提供器,这样的好处是可以将某种类型数据库的特性发挥出来.我们来看看ADO.NET中的核心类。IDbConnection:定义配置某个数据库连接的一些成员。如连接字符串,超时,连接状态等。IDbCommand:定义命令以及所执行的操作。如ComandText,ExecuteReader,ExecuteNonquery,Parameter等。IDbDataParameter:他继承了IDataParmeter并扩展了他,定义了DbType,Directi. 阅读全文
posted @ 2011-10-17 18:29 hanmos 阅读(309) 评论(0) 推荐(0) 编辑
摘要:在上一篇,我们讲解了System.dll,现在我们来看System.IO,要操作IO,就需要,确定储存媒介,打开,然后读取或者写入,那么在.Net中这三步是如何的呢?还是老规矩上图 1.打开:Directory和File,前者用来操作文件夹,后者操作文件,它们和FileSystemInfo的两个子类 的区别在于,他们是静态类,对文件或文件夹的操作是弱类型的。而FileSystemInfo的两个子类是实例类,它们是强类型的。2.储存媒介:抽象Stream基类,提供了对储存媒介的同步或异步的访问,他把数据流表示为原始的字节流,他的三个子类提供了, 基于文件的Filestream,基于内存的Meno 阅读全文
posted @ 2011-10-17 18:28 hanmos 阅读(246) 评论(0) 推荐(0) 编辑
摘要:前面我们学习了.net的运行引擎,知道了Appdomain要承载各种dll,那么我们就来学习一下最基本的system.dll,这个任何代码都要引用的大家伙. 还是老规矩,图解..嘿嘿上图了 看了图以后大家应该有一个初步的了解了吧,我们来一个一个的学习吧,大家都知道.net中分为值类型和引用类型,我们来看这两种类型的区别 object:这个类是.net所有类的父类,他有一些公用的方法,如ToString,Equals,GetHashCode等,这里 用到GOF23中模板方法(Templete Method)这个设计模式,其实我们在开发中经常去用这个模式,这样就省去了其他的类重复来写这些方法... 阅读全文
posted @ 2011-10-17 18:28 hanmos 阅读(201) 评论(0) 推荐(0) 编辑
摘要:上一篇我们讲解了CIL,CTS,程序集等内容,并且留下了一个问题,就是.net如何跨平台,我们现在就来弄明白这个问题.由于篇幅有限,请大家参照第一篇的图. 按照流程图我们该讲解mscoree.dll了 由相关的.net进程来加载Mscoree.dll,对于相关进程我们在后面讲到Winform,ASP.NET时,将继续讲解. mscoree.dll:公共对象运行库执行引擎.由他来寻找所有要加载的dll的位置并且加载他们(必须包含mscorlib.dll 他是核心类库,包含大量的核心类型,System,system.io等).然后读取程序集中的元数据.所以mscoree.dll又被称为CLR的垫 阅读全文
posted @ 2011-10-17 18:27 hanmos 阅读(253) 评论(0) 推荐(0) 编辑
摘要:众所周知,DotNet框架是非常庞大的,光项目创建时的种类就有WPF,WCF,WF这三种最新的技术,还有以前的Web,WinForm,Service,Mobile等等. 这么复杂和庞大的框架,用文字来描述是远远不够的,所以我准备写一系列图文并茂的文章,把我所知道的所有Net框架中的东西全部串联起来,希望可以给大家一个DotNet框架的知识图,本人能力有限,难免有理解错误和表达不清的地方,望大家谅解并指教. 好,我们现在就开始第一张图的学习,再所有的文章写完后,大家将会得到一个完整的框架图。 下面我会做出对这个图的解释,请大家对照图来一步一步的学习。 1.CTS 和 CLS : CTS:公共.. 阅读全文
posted @ 2011-10-17 18:26 hanmos 阅读(349) 评论(0) 推荐(0) 编辑
摘要:第一部分:程序集(System.Reflection.Assembly) 1.获取Assembly对象 方法1:调用Assembly的以下4个静态方法Get...()之一:GetAssembly(Type t)GetCallingAssembly() ——返回调用当前方法的方法所在的程序集GetExecutingAssembly() ——返回当前执行代码所在的程序集GetEntryAssembly()——返回当前AppDomain中包含Main方法的程序集 方法2:调用Assembly的以下3个静态方法Load(...)之一:括号中的...表示有若干种重载 Load(...)LoadW... 阅读全文
posted @ 2011-10-17 18:19 hanmos 阅读(265) 评论(0) 推荐(0) 编辑
摘要:这篇文章我们来学习System.Reflection,.net中反射的核心类.先来看图:前面的文章,我们说过.net的元数据可以完整地描述类型,那么通过System.Reflection,可以在运行时发现类型格式,我们来看一下元数据:源代码:classClass2{privateintx;privateinty;publicClass2(inta,intb){x=a;y=b;}publicintAdd(){returnx+y;}}元数据,请看代码注释TypeDef#2(02000003)//---------------------------------------------------- 阅读全文
posted @ 2011-10-17 18:17 hanmos 阅读(289) 评论(0) 推荐(0) 编辑
摘要:.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译,所以研究下如何有效的保护dll文件。我大致的方法为 :强签名+混淆+加密。强签名 强命名程序集,可以确保你的程序集唯一,而不被篡改、冒用等;即使相同名字的程序集如果签名也会不同。强签名很简单为项目添加强名称方法:1.右键单击项目,打开属性窗口;2.在属性窗口里选择《签名》标签,选中为程序集签名的选项,在下拉列表里选择新建,如下图所示:3.打开新建签名窗口,输入签名的名称密码等内容,如下图所示:单击确定后,签名添加完成。为没有源码的D. 阅读全文
posted @ 2011-10-14 18:23 hanmos 阅读(1816) 评论(0) 推荐(0) 编辑
摘要:对于数组的访问,是应该使用for的方式的,因为这样性能更高。以下代码是恰当的。 Object[] objArray = ...; int objArrayLength = objArray.Length; for (int i = 0; i < objArrayLength; ++i) { // do something ... } String str = ...; int strLength = str.Length; for (int i = 0; i < strLength; ++i) { // do something ... } 对ArrayList这样的可使用下标进行 阅读全文
posted @ 2011-09-30 16:11 hanmos 阅读(1829) 评论(0) 推荐(0) 编辑
摘要:好久没有写文章了,由于换工作了,所以一直没有时间来写博。今天抽个空练练手下~最近接触了下Thrift,网上也有很多文章对于Thrift做了说明: Thrift是一种可伸缩的跨语言服务框架,它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C++,C#,Java,Python和PHP和Ruby结合。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 它的好处是什么?当然是它支持大多数时下流行的语言。通过Thrift命令自动生成相应的语言脚本。而进行一些性能对比中,它的好... 阅读全文
posted @ 2011-09-15 18:59 hanmos 阅读(4224) 评论(0) 推荐(1) 编辑
摘要:除了Lock()、Monitor之外,我们最长用的就是Mutex了,但是玩不好Mutex就总会造成死锁或者AbandonedMutexException(我就玩的不怎么好,在并发性访问测试的时候总是遇到关于Mutex的问题,各位线虫见笑了,不过还是把我遇到的一些问题和总结拿出来和大家分享,有误的地方还往指正。还是先举一个简单的例子,来说明一下这个东西:publicclassThreadMutex{publicvoidTest(){Threadt1=newThread(Thread1);Threadt2=newThread(Thread2);t1.Start();t2.Start();}publ 阅读全文
posted @ 2011-05-24 17:29 hanmos 阅读(259) 评论(1) 推荐(0) 编辑
摘要:委托是C#中非常重要的一个概念,并在C#中得到了丰富的应用,如事件,线程等。那什么是委托呢?具体来说,委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。委托具有以下特点:委托类似于 C++ 函数指针,但它是类型安全的。委托允许将方法作为参数进行传递。委托可用于定义回调方法。委托可以链接在一起;例如,可以对一个事件调用多个方法。方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。在C#中使用委托分为三步:. 阅读全文
posted @ 2011-04-27 18:23 hanmos 阅读(214) 评论(0) 推荐(0) 编辑
摘要:事件,是C#编程模型中重要的一个概念,通过对事件的理解,可以更好的了解C#程序运行机制。C#中的事件,可以简单的理解为类或者对象发生了一件事,并且把这件事通知给了其他的类或者对象,其他的类或者对象可以根据事件的消息有所反应。这非常类似设计模式中的观察者模式。引发事件的类或对象,可以称之为事件源,注册并对处理事件的类或者对象可以称为事件订阅者或者事件监听者,我比较喜欢称之为事件监听者。比如:构建一个winform应用,在窗体Form1简单放置一个按钮控件,然后,双击按钮,则可以进入代码视图中按钮click事件处理程序。 private void button1_Click(object send 阅读全文
posted @ 2011-04-27 18:21 hanmos 阅读(332) 评论(0) 推荐(0) 编辑
摘要:lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Thread t = new Thread(LockObject.MonitorIncrement); 6 Thread t1=new Thread(new ThreadStart(LockObject.LockIncrement)); 7 t.Start(); 8 t1.Start(); 9 }10 }11 12 13 public class LockObject14 {15 /. 阅读全文
posted @ 2011-04-27 18:20 hanmos 阅读(216) 评论(0) 推荐(0) 编辑
摘要:延迟加载,亦称延迟实例化,延迟初始化等,主要表达的思想是,把对象的创建将会延迟到使用时创建,而不是在对象实例化时创建对象,即用时才加载。这种方式有助于提高于应用程序的性能,避免浪费计算,节省内存的使用等。针对于这种做法,似乎称之为即用即创建更为合适些。先来看一下在Framework4.0中如何实现延迟加载。Framework4.0提供了一个包装类Lazy<T>,可以轻松的实现延迟加载。 ///这行代码表明:要创建一个延迟加载的字符串对象s ///原型为Lazy<T> 对象名=new Lazy<T>(Fun<T>) ///采用泛型委托进行构造,实例 阅读全文
posted @ 2011-04-27 18:19 hanmos 阅读(271) 评论(0) 推荐(0) 编辑
摘要:在多线程或单线程任务中,让线程带传入参数一直是个麻烦的问题,通常有种方法就是以类,对像的变量来传参数,这种方法理解上很简单不过在某些场合使用很麻烦,这里就不介绍了,我们主要介绍一种.NET2.0中新增加的带参数运行线程的方法,示例程序如下:ParameterizedThreadStartParStart = newParameterizedThreadStart(ThreadMethod);Thread myThread = new Thread(ParStart);object o ="hello";myThread.Start(o);ThreadMethod如下:pub 阅读全文
posted @ 2011-04-27 10:34 hanmos 阅读(2391) 评论(0) 推荐(0) 编辑