摘要:最近做一个项目,由于是在别人框架里开发app,导致了很多限制,其中一个就是不能直接引用webservice 。我们都知道,调用webserivice 最简单的方法就是在 "引用" 那里点击右键,然后选择"引用web服务",再输入服务地址。确定后,会生成一个app.config 里面就会自动生成了一些配置信息。现在正在做的这个项目就不能这么干。后来经过一番搜索,就找出另外几种动态调用webservice 的方法。废话少说,下面是webservice 代码View Code using System;using System.Collections.Gene
阅读全文
摘要:.net内存回收与Dispose﹐Close﹐Finalize方法一. net的对象使用一般分为三种情况﹕1.创建对象2.使用对象3.释放对象二.创建对象1.创建对象实际分为两个步骤﹕变量类型宣告和初始化对象2.变量类型宣告(declare),如﹕FileStreamfs这行代码会在当前的变量作用域空间(栈或堆)里建立一个叫做fs的变量﹐至少四个字节吧(因为要存一个对象的地址)3.初始化对象对象在使用(调用其方法或属性)前﹐必须进行初始化。如﹕fs=newFileStream(@"C:\test.txt",FileMode.OpenOrCreate);这行代码会分成3个步骤
阅读全文
摘要:字符串常见操作(1)取字符串长度 <string>.Length;(2)字符串转为比特码 GetBytes(<string>)(3)字符串相加 推荐StringBuilder sb = new StringBuilder();sb.Append(<string>);(4)截断字符串的一部分 变量.SubString(起始位置,截取位数);(5)查指定位置是否为空字符 char.IsWhiteSpace(字符串变量,位数);(6)查字符是否是标点符号 char.IsPunctuation(‘字符’);(7)把字符转化为数字,查代码点 (int)’变量’(8)把
阅读全文
摘要:ViewState的使用比较简单,一两句话就可以了。赋值:ViewState[key] = value;取值:value = ViewState[key];最主要的作用就是可以在当前页面保存值,ASP.NET的页面状态维护就是使用ViewState来实现的,基本上每一个ASPX页面都可以看到如下类似的html代码:<inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUKMTkwNjc4NTIwMWRkyv4ncofW5vaWXdXRtXfX
阅读全文
摘要:WPF使用XAML来描述用户界面,每个XAML元素往往对应着相应的WPF对象,元素的属性对应着对象的属性。由于XAML元素与WPF对象之前存在着这种对应关系,其实可以将XAML代码看成是WPF对象“序列化”后的结果。WPF提供了XamlWriter 和 XamlReader 两个类实现WPF对象的XAML序列化和反序列化。示例项目:展示了一个绘图板,用户用鼠标点击此绘图板,程序将以随机颜色和大小绘制一个矩形,点击“保存”按钮,当前图形将被保存到磁盘上一个名为“PicData.dat” 的文件中,点击“重建”按钮,将恢复上次保存的图形。前台的XAML代码:<Window x:Class=&
阅读全文
摘要:应用序列化技术的一个典型开发场景就是保存应用程序的当前状态,它允许用户暂时中断当前的工作,关闭程序退出,下次重新启动程序时自动恢复上次的工作状态。示例:保存窗体颜色和位置的对象:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Drawing;namespace SaveFormStatus{ [Serializable] public class FormStatus { public Color BackgroundCo...
阅读全文
摘要:本日记介绍序列化技术在实际开发中的用武之地。在了解了对象序列化与反序列化的方法之后,自然想到可以使用它来实现对象复制。当序列化技术用于对象复制时,我们不将其序列化到文件中,而是将其序列化到内存流中,通过反序列化即可“批量克隆”大量的对象。示例:using System;using System.Collections.Generic;using System.Text;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization;using System.IO;namespace
阅读全文
摘要:前几个日记都是介绍单个对象序列化的,其实,可以在序列化过程中向流连续写入多个对象。继续前面的示例,如果是多个学生对象//学生对象private List<CollegeStudent> stus = new List<CollegeStudent>();需要保存数据时,将集合中的对象序列化到文件中://将学生清单序列化到文件中 private void SerializeStudentList(String FileName, List<CollegeStudent> stus) { using (FileStream writer = new FileSt
阅读全文
摘要:接着上一节的内容,有时候我们在对象中,并不是所有的字段需要序列化。示例:以下是这个窗体需要用到的实体类using System;using System.Collections.Generic;using System.Text;using System.Runtime.Serialization;using System.Collections;namespace MutliObjectSerialization2{ [Serializable] class CollegeStudent:IDeserializationCallback { public St...
阅读全文
摘要:.NET框架提供了三种序列化的方式:1、是使用BinaryFormatter进行序列化;2、使用SoapFormatter进行序列化;3、使用XmlSerializer进行序列化。第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,而第二种将数据流格式化为XML存储;第三种其实和第二种差不多也是XML的格式存储,只不过比第二种的XML格式要简化很多(去掉了SOAP特有的额外信息)。简单的说,第一种是将对象的数据看成是二进制的数据而直接写入流中,称为“二进制序列化”,第二种和第三种是将对象数据用XML方式表示之后再经纯文本的方式写入流中,称为“XML序列化”。.net提供了两种“数据格
阅读全文
摘要:对象的序列化主要解决的是对象状态的保存问题。这里所说的“对象状态”,其实就是指某一时刻对象所拥有的各个字段值的集合。序列化最主要的作用有:1、在进程下次启动时读取上次保存的对象的信息 2、在不同的AppDomain或进程之间传递数据 3、在分布式应用系统中传递数据......一、对象序列化的概念我们的程序运行在内存空间中,因此程序一关闭,这些对象也都会被CLR的垃圾回收机制销毁。程序第二次程序时,又重头来过。如果希望第二次运行程序时能“重现"第一次运行时的“场景”,即恢复第一次运行时各个对象的状态,应用程序就必须采用某种方法将对象各个字段的值保存到磁盘文件中,这样在需要时可以从磁盘文
阅读全文
摘要:所谓的“对象的复制” 即生成一个与指定对象“一模一样”的“同胞兄弟”。对于对象的复制,有浅复制与深复制两种情况。1、 浅复制:是指当对象的字段值被复制时,字段引用的对象不会被复制。例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅复制,那麽两个对象将引用同一个字符串。2、 深复制:是对对象事例中字段引用的对象也进行复制的一种方式。 例如,如果一个对象有一个指向字符串的字段,并且对该对象做了一个深复制的话.我门将创建一个新的对象和一个新的字符串.新对象将指向新字符串。3、.NET中默认的对象复制方式为浅复制,我们可以通过两种方式实现深复制。 A、类实现Icloneable接口。
阅读全文
摘要:本文涉及:1.对列表中的元素进行“批量类型转换”2.对列表中每个元素的“加工”3.对列表元素的排序4.检测列表中的元素是否满足某个条件5.在列表中查找元素注:上述的操作并不是针对数组,或者List..而是有通用性,一般实现了IEnumerable<T>接口的列表都可具有下面的方法。一、对列表中的元素进行“批量类型转换”在某些情况下可能会需要将列表中的所有元素转换为另一个类型,这个工作可以通过调用 ConvertAll 方法实现。public List<TOutput> ConvertAll<TOutput>( Converter<T, TOutput&
阅读全文
摘要:本文内容包括:使用.NET 4.0 新增的接口:1、比较两个数组是否相等2、比较两个数组大小。在.NET 4.0中我们将看到数组方面有很大的改进,本文将给大家讨论的是.NET 4.0数组的新增功能,希望对大家用好.NET 4.0数组有所帮助。1 两数组是否“相等”?在实际开发中,有时我们需要比对两个数组是否拥有一致的元素,例如,以下两个数组由于拥有相同的元素,因此被认为是相等的:int[] arr1 = new int[] { 1,2,3,4 }; int[] arr2 = new int[] { 1,2,3,4 }; 在.NET早期版本中,要实现上述数组比对功能,必须自己动手编...
阅读全文
摘要:在上一示例中,如果用户输入了一个不存在的文件夹,会直接抛异常,那么在异步中,如果出现异常了,是什么机制来处理的呢。由于发生异常的代码与调用代码位于同一个线程中,因此当异常发生时,计算机会中当前线程的执行流程,转去执行异常处理代码。如果异常是在异步调用的过程中抛出的,调用者线程与执行异步调用 的线程不是同一个,那又该怎样处理?1、当一个异步调用的方法抛出一个异常,CLR会捕获它,当启动异步调用的线程(称为调用者线程)调用 EndInvoke 方法等待异步调用线束时,CLR会将此异常再次抛出,这样,调用者线程即可捕获它。2、如果在调用BeginInvoke 方法启动异步调用时提供了一个回调方法,则
阅读全文
摘要:当程序启动一个异步调用之后,调用者线程必须有一种方法能知道此调用的执行情况,并且在这一调用执行完毕之后,取回执行结果。可以有以下二种方法:一、使用轮询现在我们来改造上一节的示例程序。我们可以在程序执行异步调用的过程中,让计算机每隔一段时间向控制台输出一个小点,告诉用户搜索工作正在进行中,从而可以大大改善程序的用户友好性。示例程序:namespace AsyncCalculateFolderSize2{ class Program { //计算指定文件夹的总容量 private static long CalculateFolderSize(string ...
阅读全文
摘要:上一节日记中,项目所展示的异步编程模式到底是怎么实现的?上一节代码中定义了一个委托:public delegate long CalculateFolderSizeDelegate(string FolderName);经过编译器,在编译上述委托语句时,会自动产生以下的类模板:public sealed class CalculateFolderSizeDelegate: System.MulticastDelegate{ public CalculateFolderSizeDelegate(Object target , int methodPtr){.......} publi...
阅读全文
摘要:.net 的异步编程技术主要分为两个块:1、使用IAsyncResult 的异步编程模式。2、基于事件的异步编程模式。C#编译器会为每个委托生成支持异步执行的 BeginInvoke / EndInvoke 方法,从而将委托和异步编程紧密联系起来了。当同步执行程序时,如果执行到需要执行较长时间的代码时,用户必须等待,也会认为程序已经卡死或死机了。同步程序的示例代码如下:namespace CalculateFolderSizeNoAsync{ class Program { //计算指定文件夹的总容量 private static long Calcul...
阅读全文
摘要:Predicate<T>委托在.NET类类库中经常出现,此委托的定义如下:public delegatebool Predicate<T>(T obj);从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明函数参数所引用的对象应满足的条件,条件满足时,函数返回true.在类库中,List<T> 里面的 Find方法, 定义如下:public T Find(Predicate<T> match);那么我们可以在外部定义一个查
阅读全文
摘要:为了方便开发,.net基类库针对在实际开发中最常用的情形提供了几个预定义好的委托,这些预定义委托用得很广。Func,Action 的介绍及其用法Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能。Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型,Func<T,T,Result>:有参数,有返回类型Action,则既没有返回也没有参数,Func<T
阅读全文