![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C# Advanced
中辽普坦
知福、惜福!活在当下,幸福当下(Share my knowledge with the world.)
展开
-
序列化与反序列化
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。反序列化是把已经序列化的流对象转换为原来的对象形式。序列化有:二进制序列化、SOAP序列化和XML序列化原创 2011-04-30 08:22:00 · 539 阅读 · 0 评论 -
C# 泛型委托
http://developer.51cto.com/art/200908/146230.htm C# 泛型委托学习之前首先来看看什么是C# 委托,C# 委托是一种引用方法的类型。一旦为委托分配了方法,C# 委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。这样就可以转载 2011-12-07 17:11:15 · 1470 阅读 · 0 评论 -
Event
事件处理时组件设计中相当重要的一环,在C#事件与delegate是紧密相关的,下面是一个简单的事件范例。1-1using System;namespace EventDemo{ public delegate void ProcessHander(object sender); public class Class1 { private event Pr原创 2011-12-13 09:56:10 · 669 阅读 · 0 评论 -
C# 创建windows服务
一.Windows服务介绍: Windows服务指的是操作系统启动时可以自动打开的应用程序。windows服务可以再没有交互式用户登录系统的情况下运行,在后台进行某些处理。在以前,编写Windows服务程序需要程序员很强的C或C++功底。然而现在在Visual Studio.Net下,你可以运用C++或Visual C#或Visual Basic.Net很轻松的创建一个Windows转载 2012-04-01 10:03:58 · 729 阅读 · 0 评论 -
用C#创建Windows服务(Windows Services)
用C#创建Windows服务(Windows Services)Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称。用Visual C# 创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Windows服务并使用它。这个服务在启动和停止时,向一个文本文件中写入一些文字信息。 第一步:创建服务框架 要创建一个新的 Wi转载 2012-03-20 13:56:12 · 506 阅读 · 0 评论 -
委托与事件
一、委托的定义: C#中的委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为,委托方法的使用可以像其他任何方法一样具有参数和返回值。委托对象能被传递给调用该方法引用的代码而无须知道哪个方法将在编译时被调用。委托是函数的封装,它代表一“类”函数。他们都符合一定的签名:拥有相同的参数列表、返回值类型。同时委托也可以看作是对函数的抽象,是函数的“类”。此时,原创 2011-09-21 00:00:22 · 1061 阅读 · 0 评论 -
Lambda 表达式
1. Lambda表达式 “Lambda” 表达式”是一个匿名函数,用于创建委托或表达式树类型。 “=>”为Lambda 运算符,读为“goes to”。Lambda 运算符左边是“输入参数”,右边是“表达式或语句块”,如下所示:delegate int del(int i);static void Main(string[] args){ del原创 2011-12-07 17:09:20 · 683 阅读 · 0 评论 -
无法序列化会话状态。请注意,当会话状态模式为“StateServer”或“SQLServer”时,不允许使用无法序列化的对象或 MarshalByRef 对象。
session是工作在你的应用程序进程中的。asp.net进程、iis往往会在20分钟之后重启相关的应用程序,缓冲池满了(例如100个之后)也会重启,各种进程保护措施都会随时重新启动,因此InProc方式丢失session是很正常的事。csdn上明确告诉了这种模式只能保存“易失的、暂时的 ”变量,这是cache没有之前的一种解决方案。而长期保持的数据就要保存在外部数据源中。状态服务器就是一种进程外原创 2012-05-14 12:55:27 · 10724 阅读 · 1 评论 -
Attributes特性
1、Attributes语义学程序语言经历多次革命,多重继承渐渐消失于近代程序语言中,其空下的位置也正式由接口(Interface)所取代。另一方面,对象持久机制也慢慢成为程序语言的基本建设之一,不过目前出现一个诡异的现象,在java语言中,类要支持Serilization就必须声明成如下形式:public class ClassA implements java.io.Serializa原创 2011-10-14 09:36:33 · 1992 阅读 · 0 评论 -
.NET特性与反射
.NET编译器的任务之一是为所有定义和引用的类型生产元数据描述。除了程序集中标准的元数据外,.NET平台允许程序员使用特性(attribute)把更多的元数据嵌入到程序集中。简而言之,特性就是用于类型(比如类、接口、结构等)、成员(比如属性、方法等)、程序集或模块的代码注释。当浏览.NET命名空间时,将发现许多预定义特性,可以在应用程序中使用它们。此外,可以创建自定义特性,通过从Attribu原创 2011-09-22 22:19:07 · 3850 阅读 · 0 评论 -
System.Type类
System.Type类 System.Type类定义了很多成员,可以用来检查某个类型的元数据,它们返回的类型大多位于System.Reflection命名空间中。举例来说,Type.GetMethods()返回一个MethodInfo类型的数组,Type.GetFields返回一个FieldInfo类型的数组等。System.Type提供的完整的成员组是很容易扩展的。使用S原创 2011-09-24 12:51:50 · 10059 阅读 · 0 评论 -
动态加载程序集与晚期绑定
动态加载: CLR可以根据程序集清单探测一个外部应用的程序集。虽然这很好,但是在很懂时候,我们需要运行时以编程的方式动态载入程序集,即使那些程序集没有记录在程序清单中。正式地说,这种按需加载外部程序集的操作被称为动态加载。System.Reflection定义了一个名为Assembly类型,我们还可以动态加载私有或共享程序集,并找到关于程序集自身的特性。从本质上说,Assembly类提供的方法原创 2011-09-24 13:09:16 · 1560 阅读 · 0 评论 -
System.Net.Mail
System.Net.Mail命名空间是在.NET Framework中新增的,该命名空间提供了发送电子邮件的功能。System.Net.Mail命名空间包含用于将电子邮件发送到SMTP服务器的类,这些类需要结合Microsoft STMP Server一起使用。概述System.Net.Mail命名空间下有StmpClient类用于发送邮件,可以完全替代SmtpMail类。利用SmtpC原创 2011-04-12 08:38:00 · 20939 阅读 · 0 评论 -
C# Socket
看到这个题目,是不是很眼熟?在博客园里搜下,保证会发现关于这个东东的文章实在是太多了~~~真得是没有写得必要,而且我也有点懒得去琢磨字句。(看到这,肯定得来个转折的了,不然就看不到下文了,不是吗)但是,为了自己下一篇要写的文章做参考,还是有必要先补充一下socket基础知识。 注意:如果你已经接触过socket,那就没什么必要耽误时间看下去了。另外,如果发现其中任何错误,欢迎直接指出转载 2011-12-10 20:53:07 · 698 阅读 · 0 评论 -
C#线程系列讲座(2):Thread类的应用
http://www.cnblogs.com/nokiaguy/archive/2008/07/16/1244746.html 一、 Thread类的基本用法通过System.Threading.Thread类可以开始新的线程,并在线程堆栈中运行静态或实例方法。可以通过Thread类的的构造方法传递一个无参数,并且不返回值(返回void)的委托(ThreadSt转载 2011-12-06 21:13:27 · 614 阅读 · 0 评论 -
程序集
二进制重用(binary reuse)的概念是.NET平台的一个主要特点,它使得应用程序可以使用多个外部程序集(又称代码库)里面的类型。.NET程序集的作用:.NET应用程序可以由多个程序集拼装而成。简单来说,程序集就是一个以公共语言运行库(CLR)为宿主的、版本的、自描述的原创 2011-09-16 23:15:31 · 920 阅读 · 0 评论 -
私有程序集和共享程序集
私有程序集:私有程序集是一种简单的程序集类型,一般附带在某些软件上,且只能用于该软件。系统可以保证私有程序集不被其他软件使用,因为应用程序只能加载位于主执行文件所在文件夹或其子文件夹中的程序集。有程序集要求放置在客户端应用程序所在目录(应用程序目录)或者其子目录下。私有程序集原创 2011-09-19 21:32:40 · 2445 阅读 · 0 评论 -
程序集清单结构
清单包含了程序集的自描述信息,共有4种自描述信息,清单中包含了每一种信息表。一、AssembleyDef,这个表只有一项,它包括:a:程序集的名称(没有扩张名和路径)b:程序集的版本c:程序集的区域设置d:描述程序集特征的标志e:原创 2011-09-19 22:06:53 · 780 阅读 · 0 评论 -
线程1
启动线程(Starting Threads)创建一个线程的最简单的方法就是创建Thread类的一个新的实例。让Thread构造函数接受一个参数—— 一个委托实例。CLR专门为这种用途提供了ThreadStart委托类,它会指向你的一个方法。它允许你构造一个线程,然后告诉你:“当你启动的时候,就执行这个方法”。ThreadStart委托声明如下:public delegate void Th原创 2011-10-22 17:16:34 · 499 阅读 · 0 评论 -
线程
使用线程有几个原因。在应用程序中进行网络调用需要一定的时间。用户不希望在安装用户界面时只是等待,直到服务器返回一个响应为止。用户可以在这个过程执行其他一些操作,甚至取消发送给服务器的请求。这些都可以使用线程来实现。对于所用需要等待的操作,例如文件、数据库或网络访问的启动都需要一定的时间,此时就可以启动一个新线程,完成其它任务。即使是处理密集型的任务,线程也是有帮助的。一个进程的多个线程可以同时原创 2011-10-20 20:58:10 · 865 阅读 · 0 评论 -
同步
当你拥有一个受限的资源(如一个数据库连接)时,你可能须要限制一次只能有一个线程访问那个资源。一个经典的类比情况就是飞机上的盥洗室。你希望一次只能有一个人使用盥洗室。通过在门上加一把锁,你就可以做到这一点。当乘客要使用盥洗室时,他们会尝试开门。如果门被锁着,他们或离开去做点别的事情,或者耐心地与其他希望使用这个资源的乘客一起排队等待。当资源可用时,其中一位乘客就会离开这个队伍并获得这个资源,然后这个原创 2011-10-23 15:59:37 · 455 阅读 · 0 评论 -
事件
事件在编程的世界里,我们经常面对类似的情形:要执行某项操作,但无法提前知道应该调用哪个方法或对象去执行。经典的例子是用来处理按钮被按下,菜单中某个选项被选择或其他的“事件”方法。事件,在事件驱动的编程(event-driven programming)系统( 如微软的windows操作系统 )中,是某项经常发生的事情,它可以是由用户的操作引起的,也可以是系统状态的改变引起的,或者是由来自系原创 2011-10-15 09:53:01 · 818 阅读 · 0 评论 -
C#线程系列讲座(3):线程池和文件下载服务器
http://www.cnblogs.com/nokiaguy/archive/2008/07/16/1244746.html 如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一定程序上消耗服务器的资源。为此,一个最好的解决方法就是在服务器启动之前,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中获得线程对象,并处理请求。保存这些线程对象的结构就叫做线转载 2011-12-06 21:15:49 · 572 阅读 · 0 评论 -
C#线程系列讲座(4):同步与死锁
虽然线程可以在一定程度上提高程序运行的效率,但也会产生一些副作用。让我们先看看如下的代码:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> class Increment { private i转载 2011-12-06 21:17:28 · 591 阅读 · 0 评论 -
C#线程系列(1):BeginInvoke和EndInvoke方法
一、线程概述在操作系统中一个进程至少要包含一个线程,然后,在某些时候需要在同一个进程中同时执行多项任务,或是为了提供程序的性能,将要执行的任务分解成多个子任务执行。这就需要在同一个进程中开启多个线程。我们使用C#编写一个应用程序(控制台或桌面程序都可以),然后运行这个程序,并打开windows任务管理器,这时我们就会看到这个应用程序中所含有的线程数,如下图所示。如果任务管理器没转载 2011-12-06 21:07:59 · 705 阅读 · 0 评论 -
C#线程系列讲座(5):同步技术之Monitor
http://www.cnblogs.com/nokiaguy/archive/2008/07/31/1257625.html在上一讲介绍了使用lock来实现线程之间的同步。实际上,这个lock是C#的一个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类。先看看下面的C#源代码:Code highlighting produced by Actipro转载 2011-12-06 21:18:33 · 548 阅读 · 0 评论 -
Action、Func、Predicate 和 Converter 泛型委托详解
基础知识:labda表达式其实就是对匿名方法的封装(或者说简写)。()里面代表方法的参数。 Action 委托封装一个方法,该方法不具有参数并且不返回值。 public delegate void Action()可以使用此委托,而不用显式声明一个自定义的委托来封装方法。该封装的方法必须与此委托定义的方法签名相对应。这意味着该方法不得具有参数和返回值。例:using原创 2011-12-09 19:13:31 · 2913 阅读 · 0 评论