自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 收藏
  • 关注

转载 c# -- 对象销毁和垃圾回收

有些对象需要显示地销毁代码来释放资源,比如打开的文件资源,锁,操作系统句柄和非托管对象。在.NET中,这就是所谓的对象销毁,它通过IDisposal接口来实现。不再使用的对象所占用的内存管理,必须在某个时候回收;这个被称为无用单元收集的功能由CLR执行。 对象销毁和垃圾回收的区别在于:对象销毁通常是明确的策动;而垃圾回收完全是自动地。换句话说,程序员负责释放文件句柄,锁,以及操作系统资源...

2019-09-26 02:22:29 899

转载 C#集合 -- 自定义集合与代理

前面章节所讨论的集合都可以直接实例化,因此我们可以非常方便地使用这些集合类。但是如果你试图在集合添加或移除元素时添加控制,它们就不适用了。对于强类型集合,在某些情况下,你需要添加这样的控制: 添加或移除元素时,触发事件 更新由于添加或移除元素对应的属性 识别添加或删除元素的误操作并抛出异常 .NET Framework为上述目的提供了集合类,它们位于System.Collections...

2019-09-26 02:22:28 195

转载 C#集合 -- Equality和Order插件

在前面的文章C#相等性比较和C#排序比较中,我已经叙述了类型相等,类型哈希,和类型比较的.NET标准协议。实现了这些协议的类型在一个字典或者列表中也可以正常工作。但是需要注意的是: 只有当类型的Equals方法和GetHashCode方法返回有意义的结果时,该类型才可以作为Dictionary或Hashtable的键 只有当类型实现了IComparable/IComparable&lt...

2019-09-26 02:22:27 209

转载 C#集合--Dictionary

字典(dictionary)是一个集合,其中每个元素都是一个键/值对。字典(Dictionaries)是常用于查找和排序的列表。 .NET Framework通过IDictionary接口和IDictionary<TKey,TValue>接口,以及一些常用的子典了定义了子典协议。每个类在以下方面各有不同: 元素是否已经排序 元素是否能通过索引或键来获取 字典类是gene...

2019-09-26 02:22:26 475

转载 C#集合 -- Lists,Queues, Stacks 和 Sets

List<T>和ArrayList Generic的List和非Generic的ArrayList类支持可变化大小的对象数组,它们也是最常见的集合类。ArrayList实现了IList接口,而List<T>实现了IList<T>和IList接口(以及新增的IReadonlyList<T>)。与数组不同,所有的接口实现都是公开的,并且Add和...

2019-09-26 02:22:25 195

转载 C#集合--数组

Array类是所有一维和多维数组的隐式基类,同时也是实现标准集合接口的最基本的类型。Array类实现了类型统一,因此它为所有数组提供了一组通用的方法,不论这些数组元素的类型,这些通用的方法均适用。 正因为数组如此重要,所以C#为声明数组和初始化数组提供了明确的语法。在使用C#语法声明一个数组时,CLR隐式地构建Array类--合成一个伪类型以匹配数组的维数和数组元素的类型。而且这个伪类型...

2019-09-26 02:22:24 271

转载 C#集合--ICollection接口和IList接口

虽然列举接口提供了一个协议,用于向前的方式遍历集合,但它们没有提供一种机制来确定集合的大小,通过索引访问集合的成员,搜索集合,或修改集合。为了实现这些功能,.NET Framework定义了ICollection,IList和IDictionary接口。每个接口都有Generic的接口和非Generic的接口,请注意非Generic多数用于支持遗留代码。 这些接口的继承挂关系如下图所示:...

2019-09-26 02:22:24 205

转载 C#排序比较

与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序。排序规范如下 IComparable接口(包括IComparable接口和IComparable<T>接口) >和<运算符 当需要实现排序算法时,使用IComparable接口。在下面的例子中,Array.Sort静态方法可以调用,是因为System.String类...

2019-09-26 02:22:22 133

转载 C#集合-列举(Enumeration)

在计算机这个范畴内存在许多种类的集合,从简单的数据结构比如数组、链表,到复杂的数据结构比如红黑树,哈希表。尽管这些数据结构的内部实现和外部特征大相径庭,但是遍历集合的内容确是一个共同的需求。.NET Framework通过IEnumerable和IEnumerator接口实现遍历集合功能。 Non-Generic Generic 备注 IEnumerator IEnumerato...

2019-09-26 02:22:22 146

转载 Customer IEnuramble Extension

public static class IEnurambleExtension{ public static IEnumerable<TSource> DistinctBy<TSource, TKey> (this IEnumerable<TSource> source, Func<TSource, TKey&...

2019-09-26 02:22:20 60

转载 C#相等性比较

本文阐述C#中相等性比较,其中主要集中在下面两个方面==和!=运算符,什么时候它们可以用于相等性比较,什么时候它们不适用,如果不使用,那么它们的替代方式是什么?什么时候,需要自定一个类型的相等性比较逻辑在阐述相等性比较,以及如何自定义相等性比较逻辑之前,我们首先了解一下值类型比较和引用类型比较值类型比较对比引用类型比较C#中的相等性比较有两种:值类型相等,两个...

2019-09-26 02:22:20 371

转载 C#记录对象的变化

经常,我们会遇到一个场景,在保存对象到数据库之前,对比内存对象和数据库值的差异。下面我写了一种实现,为保存定义一个事件,然后自动找出对象之间的差异,请注意,并没有通过反射的方式去获取每个属性及其值。因为那样会影响性能。闲话不表,直接贴代码class Program { static void Main(string[] args) ...

2019-09-26 02:22:18 161

转载 c#列举和迭代器

列举 - Enumeration迭代器是一个值序列(集合)上的一个只读且只向前移动的游标。迭代器要么实现了IEnumerator接口,要么实现了IEnumerator<T>接口。从技术的角度看,如果一个对象有MoveNext方法以及Current属性,那么我们就可以将其看作一个迭代器。我们可以使用foreach语句去迭代一个可列举对象。可迭代的对象其实就是一个序列...

2019-09-26 02:22:18 78

转载 c#如何区分静态只读变量和常量

常量const常量就是一个其值永远不会改变的静态字段。常量的值会在编译时自动推算,编译器会在遇到常量时,将其逐个替换为该常量的值。常量可以是C#内建的任何数字类型或枚举类型。声明一个常量的时候必须对其进行初始化。例如:class Program{ const int a = 2; static void Main(s...

2019-09-26 02:22:17 353

转载 C#按需序列化对象为Json字符串

只贴代码,不解释了。新的代理类型确实很给力!public static class JsonHelper{ public static string ToJsonString<T>(IList<T> list, Func<T, string> fun) { StringBuilder buffer ...

2019-09-26 02:22:17 84

转载 C#代理那点事儿

Func代理是啥?Func代理接收0个或多个参数,返回TResult值;以Func<TSource, TResult>为例:Func带来封装一个方法,该方法接收一个参数,然会一个TResult类型。举个最简单的例子,求一个一维整数数组的和private static void Demo(){ Func<int[], int> ...

2019-09-26 02:22:15 71

转载 C#如何更好地理解引用类型和值类型

说道值类型和引用类型,在C#中,官方的说法就是:值类型直接指向数据;一般包括C#自带的所有数字类型,字符类型,bool类型,当然还有自定义的结构类型和枚举类型而引用类型则是指向数据存储的地址。一般指所有类,数组,代理和接口类型。请注意还包括字符类型值类型与引用类型的根本区别就是它们在内存中处理的方式:值类型的内容仅仅就是对类型的值;为一个值类型实例赋值总是赋值这个值的实例...

2019-09-26 02:22:15 74

转载 Pro ASP.NET MVC –第五章 使用Razor

Razor是微软在MVC3中引入的视图引擎的名字,在MVC4中对其进行了改进(尽管改动非常小)。视图引擎处理ASP.NET内容、寻找指令,典型地用于插入动态数据并输出到浏览器中。微软维持了两个视图引擎——ASPX视图引擎工作与<%%>标签,ASP.NET已经依赖它多年;RAZOR引擎工作与@字符后的内容块上。总的来说,如果你熟悉<%%>语法,那么你就不会在使用...

2019-09-26 02:22:14 194

转载 Pro ASP.NET MVC –第六章 MVC的基本工具

在本章,我们将介绍每个MVC程序员"武器库"的三个重要工具:依赖注入容器、单元测试框架和mock工具。在本书,对于三个工具分别都只用了一种方式实现,但每个工具都还有其他的实现方式。如果我们的实现方式不适合你的具体情况,那么你也不必担心。因为它们并不仅仅局限于我们采用的实现,你可以找到与你工作环境相适合的实现方式。在第三章,我们提到Ninject是一个推荐的依赖注入容器。它非常简单,优...

2019-09-26 02:22:13 158

转载 Pro ASP.NET MVC –第三章 MVC模式

在第七章,我们将创建一个更复杂的ASP.NET MVC示例,但在那之前,我们会深入ASP.NET MVC框架的细节;我们希望你能熟悉MVC设计模式,并且考虑为什么这样设计。在本章,我们将讨论下列内容MVC架构模式域模型和Respositories使用依赖注入创建松耦合的系统自动化测试的基础你或许已经对本章我们将讨论的概念和规范非常熟悉,尤其如果你有开发ASP....

2019-09-26 02:22:12 203

转载 Pro ASP.NET MVC –第二章 第一个MVC程序

学习一个软件开发框架的最有效的方式就是了解并使用它。在本章,你将会创建一个简单基于ASP.NET MVC Framework的数据-实体应用程序。我们会该程序划分成若干小块,每次介绍一个部分,以便你能了解到ASP.NET MVC是如何创建的。在本涨,我们会跳过一些技术细节,以使你能快速对整个框架有一个大致的了解。如果你对这些技术细节干兴趣,那么你也不用担心,我们会在后续的章节陆续介绍她们...

2019-09-26 02:22:11 239

转载 ASP.NET MVC文章系列

Summary of article list for ASP.NET MVC[Basic]Pro ASP.NET MVC chapter 2http://www.cnblogs.com/yang_sy/p/3229282.html[Advanced]Inner ASP.NET MVC Viewhttp://www.cnblogs.com/yang_sy/p/ASPN...

2019-09-26 02:22:10 56

转载 [ASP.NET MVC]视图是如何呈现的 (续)

在上一篇文章中,我们知道了通过Controller执行ActionResult的Execute可以找到对应Controler对应的ViewEngine,然后在View中把Action的结果显示出来。那么ViewEngine到底是如何工作的?我们首先从ViewReult的FindView方法开始protectedoverrideViewEngineResu...

2019-09-26 02:22:09 63

转载 [ASP.NET MVC]视图是如何呈现的

为了搞清楚ASP.NET MVC的请求过程,我们计划从结果追踪到源头。使用VS2012创建一个空白的ASP.NET MVC项目然后创建一个HelloController创建一个HelloView。在Views文件夹下创建一个Hello的文件夹,然后创建一个名为Index的View然后再view中输入hello asp.net mvc4点击App_Start下的...

2019-09-26 02:22:08 113

转载 [JavaScript] 配置JavaScript BUILD

<project name="eForm" default="concatenate"> <tstamp><format property="build.time"pattern="MMM/dd/yyyy hh:mm:ss"locale="en,US"/></tstamp><property name...

2019-09-26 02:22:07 209

转载 WCF 4.0 进阶系列 – 第十五章 构建REST服务(第三部分)

使用WCF数据服务到目前为止,本章中为你展示的例子都属于比较常见的情形。它们演示了如何使用WCF构建REST Web服务,这些服务使用WebGet和WebInvoke特性类手动定义一个对外公布数据的体系。如果你构建REST Web服务时采用ADO.NET实体框架读取数据,那么你可以使用WCF数据服务自动地完成大部分任务。使用由Visual Studio 2010提供的WCF Da...

2019-09-26 02:22:06 129

转载 WCF 4.0 进阶系列 – 第十六章 使用回调合约发布和订阅事件(第二部分)

使用回调合约通知客户端单向操作的结果使用回调合约的原则是,提供一个服务,该服务采用单向操作—不返回任何信息—的方式通知客户端程序。本小节的例子基于之前描述过的更改产品价格场景。当客户端程序调用ProductsService服务的ChangePrice操作时,当数据库中产品的价格更新后,服务将回调客户端并通知客户端价格已经发生变化。练习:为ProductsService服...

2019-09-26 02:22:06 115

转载 WCF 4.0 进阶系列 – 第十五章 构建REST服务(第二部分)

通过REST Web服务更新数据REST Web服务提供了查询数据的操作以响应HTTP GET请求。但是,HTTP协议支持其他形式的请求,你可以利用这些消息类型提供操作以修改REST Web服务中的数据。最常见的情形是你使用HTTP POST请求创建新项目的操作,HTTP PUT请求更新现存数据的操作,使用HTTP DELETE请求定义删除项目的操作。注意,上述常规并不是强制...

2019-09-26 02:22:04 65

转载 WCF 4.0 进阶系列 – 第十六章 使用回调合约发布和订阅事件(第一部分)

到目前为止,本书中你看到的练习与例子都集中于C/S模型。在该模型中,一个服务器提供一个服务,该服务等待客户端主动发出的请求,接收到客户端的请求后,处理请求,然后选择性地向客户端程序发送响应。客户端程序是活动的参与者,提交请求并有效地决定了服务何时开始执行工作。然而这只是大多数的情况,WCF还支持其他的处理体系,比如点对点网络和客户端回调。在点对点场景中,没有被动的服务。所有参与者...

2019-09-26 02:22:04 97

转载 WCF 4.0 进阶系列 – 第十四章 检测服务和路由消息(第四部分)

使用路由服务类实现手动路由无疑是非常强大的技术,但是常见的场景下你所希望的仅仅是,基于请求的某些特性而不是编写一些动态的算法以实现路由消息。为了处理这样的场景,WCF提供了RoutingService类,该类位于System.ServiceModel.Route命名空间下。给命名空间下的类图如下图所示:RoutingService类的目的在于:当消息达到时,基于内容实现路...

2019-09-26 02:22:02 107

转载 WCF 4.0 进阶系列 – 第十五章 构建REST服务(第一部分)

通常企业使用两种架构实现Web服务:基于SOAP的服务和基于REST模型的服务。这两个架构依赖HTTP协议和因特网实现的寻址体系,但采取不同的方式使用它们。到目前为止,本书所有的练习都集中在SOAP模型上,这种架构使得Web服务的设计者关注服务的业务过程,并把这些业务过程对外公开为服务的操作。相比之下,REST模型则关注企业对外公布的数据,并实现一个允许客户端程序使用自身的逻辑访问并...

2019-09-26 02:22:02 129

转载 WCF 4.0 进阶系列 – 第十四章 检测服务和路由消息(第三部分)

实现路由路由适用于处理与监测服务稍微不同的场景。有时候需要从一个服务推送消息至另一个完全不同的服务以处理该消息。比如,当客户端程序发送请求至企业内部不同的WCF服务,但是所有这些请求实际上都首先通过前端的服务,该服务相当于WCF服务的防火墙。前端服务可以运行在企业外围网络的计算机上,而实际上处理请求的WCF服务可以寄宿在位于企业内部受保护的网络中。前端服务可以实现一个路由机制...

2019-09-26 02:22:01 132

转载 WCF 4.0 进阶系列 – 第十四章 检测服务和路由消息(第二部分)

使用发现代理使用服务声明可以减少由Probe消息和ProbeMatch消息带来的网络流量,但是如果服务启动时客户端程序没有运行那么会发生什么?答案是客户端将失去通知消息因此不能发现服务,因为客户端不能连接到服务。解决方法是使用一个发现消息和声明的结合体;创建一个中间服务,该服务使用一个已知的地址侦听来自服务的声明消息并缓存这些声明消息。在客户端程序中,发送Probe消息至中间服务...

2019-09-26 02:22:00 63

转载 WCF 4.0 进阶系列 – 第十四章 检测服务和路由消息(第一部分)

前言如果客户端程序向WCF服务发送一条请求消息,那么客户端通过端点发送该请求。如果你回想一下,端点由三部分组成:地址,绑定和合约。地址指明消息发送的目的地;绑定指明传输、格式、以及于与服务进行通讯所使用的协议;合约决定客户端可以发现的消息以及客户端期望的响应消息。多个服务可以实现同一个服务合约,或一个服务也有可能更改地址。如果客户端将服务特定的地址硬编码在客户端的配置文件中,那么...

2019-09-26 02:21:59 116

转载 WCF 4.0 进阶系列 – 第十三章以更好的性能实现WCF服务(下)

启用MTOM传输数据MTOM 是一种机制,用来以原始字节形式传输包含 SOAP 消息的较大二进制附件,从而使所传输的消息较小。一条SOAP消息经常由消息头和消息体构成;消息头提供地址,路由信息和安全信息;消息体提供数据,以及消息的负载。消息体由XML构成,包含在传输至服务的请求或者返回客户端程序的响应信息中。消息体信息的真正结构是由WSDL对操作的描述而指定,这些操作由你在服务中...

2019-09-26 02:21:58 125

转载 WCF 4.0 进阶系列 – 第十三章以更好的性能实现WCF服务(上)

前言良好的性能是大多数应用程序和服务的关键因素,你可以通过周密地设计,以及选择合适的特性以确保WCF服务维持其吞吐量,保持响应并具有可扩展性。到目前为止,这些技术包括事务(上,下),session状态,可靠地消息传递,以及异步操作(上,中,下)。还有其他一些影响性能的方面,比如安全(企业内部WCF的安全,因特网环境下WCF的安全)。如同我们在前面章节中讨论的那样,实现消息级别...

2019-09-26 02:21:57 108

转载 WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(中)

单向操作特别适用于"触发然后忘记"场景,在该场景中,客户端程序并不期望服务回传任何信息。但是,许多操作并不适用于这种情况,其向客户端程序返回数据。为了处理这些情况,WCF支持异步操作和IAsyncResult设计模式。在WCF中你可以使用两种方式实现IAsyncResult设计模式:在客户端 程序中异步调用操作;或在WCF服务中实现异步操作。IAsyncResult 设计模式并不...

2019-09-26 02:21:56 68

转载 WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(下)

使用消息队列消息队列是本书WCF异步技术中的最后一个出场的。消息队列可以为消息传输提供持久性、可靠性和事务性。甚至,发送消息的客户端程序与接受消息的服务可以不必同时运行。但使用该灵活性需要付出一定的代价,那就是消息队列只能支持单向传输。因此如果使用该技术实现客户端程序和服务并且服务需要向客户端发送响应消息时,需要仔细的设计。另外,消息队列比其他传输协议更慢,这是因为它所支持的可靠...

2019-09-26 02:21:56 71

转载 WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(上)

当客户端程序调用一个单向操作后,客户端可以继续运行而不用等待服务完成该操作。你可以通过操作合约指定单向操作行为。达到该目的的最简单方式是在当以操作时设置Operation-Contract特性类的IsOneWay属性为true。在本章的练习中你将会看到具体的例子。单向操作的效果定义一个操作为单向操作包含多个暗示,其中最重要的暗示为具有单向操作特性的操作不能回传任何数据至客户端...

2019-09-26 02:21:55 70

转载 WCF4.0进阶系列—第十一章 编写代码控制配置和通信(下)

前言WCF客户端通过代理对象可连接至服务。如果服务管理员禁用了服务元数据公布或者出于性能原因,那么在客户端可以通过代码创建ChannelFactory对象连接至服务并与服务通讯;甚至还可以通过扩展ClientBase抽样类与服务交互。使用上述两种方式时有一个前提那就是服务开发人员可以提供包含服务合约的组件。如果该前提也不存在,只要你拥有描述服务接受的SOAP消息和服务发送的响应消...

2019-09-26 02:21:54 85

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除