随笔分类 -  .NET语言特性

探索.NET中语言的特性(主要C#和VB.NET),以及相关这些特性上的问答探讨。
摘要:一、UI线程异常: 1)直接在主线程中的异常,直接用try……catch捕获(如果你怀疑某个代码会抛出异常)。 2)其它可能性:建议使用Application.ThreadException+Application.SetUnhandledException捕获异常,并防止应用程序终止。 在Prog 阅读全文
posted @ 2016-09-14 20:43 Serviceboy 阅读(634) 评论(0) 推荐(0)
摘要:【一】步骤: 1)将对象转化为Json字符串。 2)将Json字符串编码为byte数组。 3)设置传输对象(WebRequest或者HttpClient)的ContentType是"application/json"。 4)设置传输对象的ContentLength=Byte数组的长度。 5)开始传输 阅读全文
posted @ 2016-03-07 16:21 Serviceboy 阅读(790) 评论(0) 推荐(0)
摘要:一、安装Message Queue:在Win7之前,控制面板,添加删除组件(Windows Message Queue)。Win7~Win8:控制面板,程序和功能,启用或关闭Windows功能(找到Windows Message Queue服务器)选项,连同所有子类一并勾上即可,自动安装。二、使用M... 阅读全文
posted @ 2015-07-22 20:37 Serviceboy 阅读(2593) 评论(0) 推荐(0)
摘要:下载PostSharp(Visual Studio Gallery)。安装一个AOP编译器和引入PostSharp.Aspects(注意安装过程中请使用免费的Express版本),然后初步演示代码:using PostSharp.Aspects;using System;namespace Cons... 阅读全文
posted @ 2015-04-25 09:09 Serviceboy 阅读(499) 评论(0) 推荐(0)
摘要:和XmlDocument最大的不同——XmlReader逐行读取。单独很少使用,一般配合序列化(反序列化)使用,以下给出具体例子:namespace ConsoleApplication1{ public class CData : IXmlSerializable { p... 阅读全文
posted @ 2015-01-30 10:29 Serviceboy 阅读(579) 评论(0) 推荐(0)
摘要:1)Mutex:进程之间的同步(互斥量)。2)lock/Monitor……:线程同步。其中lock是Monitor的简化版本(直接生成try{Monitor.Enter(……)}finally{Monitor.Exit(……);}方法。当然,Monitor还有Pulse方法,该方法对于锁定同一个对象... 阅读全文
posted @ 2015-01-13 11:13 Serviceboy 阅读(455) 评论(1) 推荐(0)
摘要:无意当中看了一些博文,说有人想自己尝试实现基于异步操作的方法: 1)直接使用Task(不说咯,这个是微软给我们的标准实现方法)。 2)必须继承INotifyCompletion接口,同时自己实现IsCompleted(必须)和Result(可选),GetResult(必须)和OnComple... 阅读全文
posted @ 2014-08-17 13:55 Serviceboy 阅读(1498) 评论(0) 推荐(0)
摘要:微软的MSDN说async和await是“异步”,但是不少人(包括笔者自己)有一些误区需要澄清:为什么await语句之后没有执行?不是异步吗? 【示例代码】public partial class Form1 : Form { public async Task Process... 阅读全文
posted @ 2014-08-07 13:28 Serviceboy 阅读(1247) 评论(3) 推荐(0)
摘要:传统单例模式的实现有懒汉、饿汉等模式,也有双锁机制(防止不必要的线程再度进入锁的临界区实例化单例模式的全局变量)。不过据说(未经考证)在VS中CPU开启“out-of-order execution”,仍然会导致出问题,原因在于: 我们假设a和b线程同时试图初始化单例模式的全局变量,a先进入方... 阅读全文
posted @ 2014-05-17 18:14 Serviceboy 阅读(358) 评论(0) 推荐(0)
摘要:用XmlDocument创建一个文档,或者插入一个节点,默认会生成xmlns(命名空间)特性。假定有一个xml文档如下结构: http://www.myWebSite.com/ http://www.myWebSite.com/MGID_17 http://www.myWebSite.com/MGID_18 现在要在urlset插入一个url节点,结果如下:………………………… New Value Here C#代码如下:XmlDocument doc = new XmlDocument(); doc.Load("XML... 阅读全文
posted @ 2013-10-03 17:00 Serviceboy 阅读(1151) 评论(0) 推荐(0)
摘要:在C#中有“静态类”的概念,自然里边全部的方法都是静态的。这意味着你可以直接通过"类名.方法名"去调用(例如System的Math类就是典型)。在VB.NET中,没有“静态类”的概念(当然你可以用“单例模式”,把构造函数弄成Private的方式,其它方法都是静态的)如果某些方法需要被其它地方频繁使用,可以创建“模块”。在VB.NET中一旦创建了模块,其中任何方法,属性或者变量都可以被其它地方引用,因此适合全局情况下频繁交互的情况(比如初始化加载的参数,可能后续程序要使用)等。 现在问题在于,如果你把一个类似以下的模块代码封装成DLL类库,无论在C#或者是VB.NET中都无法 阅读全文
posted @ 2013-08-10 12:38 Serviceboy 阅读(2082) 评论(0) 推荐(1)
摘要:关于反射的一些总结:1) Load,LoadFrom和LoadFile:Load:只加载本地程序集中指定的类(通过命名空间等方式指定)。LoadFrom:通过外部相对或者绝对路径加载指定的类库或者Exe等文件,且重复加载相同程序集仅第一次有效;如果该程序集引用其它程序集,会被自动加载。LoadFile:通过外部相对或者绝对路径加载指定的类库或者Exe等文件,重复加载相同程序集最后一次有效;如果该程序集引用其它程序集,不会被自动加载。【可具体参考我的博文:http://www.cnblogs.com/ServiceboyNew/archive/2011/11/17/2241215.html】2) 阅读全文
posted @ 2013-08-01 14:41 Serviceboy 阅读(371) 评论(0) 推荐(0)
摘要:一、C#中的“短路”逻辑符:C#中“逻辑与”和“逻辑或”都是短路的。所谓“短路”,意味着对于“与”而言,只要一个是false则忽略后面布尔表达式,直接返回false;“或”相反——只要一个是true直接返回true。下面看一个例子: int i = 0; if (false && 1 / i != 0) { Console.WriteLine("通过短路与"); } else { Console.WriteLine("未通过... 阅读全文
posted @ 2013-06-17 10:56 Serviceboy 阅读(1083) 评论(0) 推荐(2)
摘要:一、“/”运算符:C#中默认的“/”是取整除法(不四舍五入)。譬如C#中1/2默认返回一个整数0.但是VB.NET中“/”返回一个Double类型的数值(相当于C#中1.0/2的效果)。在做这类运算时候,VB.NET会把被除数和除数提升到Double类型,因此1/0在VB.NET不是错误(因为这个表达式被解析成:1/CDbl(0))。结果CDbl(0)是一个接近于0的,但不是等于0的浮点数(可以理解为“正无穷小”),那么结果是“正无穷大”。但C#在做"/"时候,由于两个都是整数,因此直接做整数相除,抛出异常(如果尝试在C#中1.0/0,可以得到和VB.NET中一样的结论)。 阅读全文
posted @ 2013-06-17 10:51 Serviceboy 阅读(518) 评论(0) 推荐(0)
摘要:首先,“null”是C#中(VB.NET为Nothing),表示某个引用对象变量“未引用”任何实体时候的状况(典型症状是如果调用这个变量的某个方法,会抛出NullException之类的异常)。String.Empty是一个静态的公共变量,表示某String变量不包含任何字符(等同于"")。不过从性能上说,用String.Empty比声明用一个""好一些——显然地,前者是String类的静态变量,无论如何使用只产生一个实例,后者用几次恐怕要产生几次了。至于DBNull.Value,也是一个静态属性。它唯独用于数据库(例如使用DataReader读取数据的 阅读全文
posted @ 2013-06-09 09:58 Serviceboy 阅读(767) 评论(0) 推荐(1)
摘要:我们知道,配置文件(App.config)可以通过ConfigurationManager类读取,但是如何进行动态设置和保存呢?方法很多,这里介绍一种简单的方法: 现在假定我有一个控制台项目,具体结构如下: 这个App.config中内容如下:<?xml version="1.0" encoding="utf-8" ?><configuration> <appSettings> <add key="Name1" value="Value1" /> </appSe 阅读全文
posted @ 2013-04-23 11:40 Serviceboy 阅读(602) 评论(0) 推荐(0)
摘要:昨日MSDN有人询问我一个问题,假设某个类中有两个事件定义(它们的委托完全一致,并且同时绑定到一个方法)。假设C#代码如下:namespace CSharp{ class A { public event Action MyEvent; public event Action MyEvent2; public void Call() { MyEvent(); } public void Call2() { MyEvent2(); ... 阅读全文
posted @ 2013-02-28 12:43 Serviceboy 阅读(506) 评论(0) 推荐(0)
摘要:首先先感谢MSDN中的一些优秀的外国友人精彩的回答,我从那里也受益良多,写此博文。 自从2.0版本的net framework推出之后泛型(Generic)得到了广泛好评。它不必像object类型一样性能上因为“拆箱”或者“装箱”得到损失,同时在编译语法检测阶段就可以实时检测出传入或者传出的类型是否符合特定条件。 但“金无赤足,人无完人”——在我们享受这些幸福编程的同时,泛型自身类型的不确定也带来了一个显著的问题——无法进行运算符重载。譬如现在我要写一个函数(一个通用的选择排序算法,使用泛型T),该怎么办呢?如果你简单使用这样的代码(C#如下)://从小到大,改进型选择排序算法publ... 阅读全文
posted @ 2013-02-27 09:51 Serviceboy 阅读(693) 评论(0) 推荐(0)
摘要:一、“接口”初步:从OOP设计角度来分析,“接口”是一个很特殊的“类”,特殊之处在于:1)不能为接口中定义的方法添加关键字(只允许是public)。2)可以定义事件/方法/属性,但都无法实现(只能让实现类去实现)。以上这些限制了接口的应用范围——意味着接口只是作为一个对类的契约而存在,谈不上“代码复用”(因为接口自身不能定义方法,自然实现类无法调用它们,也就不构成重载/重写的概念了),也根本不存在“继承”的概念。因此“接口”的关键字是Implement而不是Inherit(在C#中则都是英文状态的冒号)。由接口自身的定义,我们联想到最简单的接口应用就是强制某个类必须具备某种方法,譬如说我要设计 阅读全文
posted @ 2012-11-19 13:38 Serviceboy 阅读(788) 评论(0) 推荐(2)
摘要:面向对象程序设计最基本的一个特点在于类可以继承——即通常我们所谓之“代码复用”原则优先。继承可以来自一个普通类,也可以来自一个抽象类,那么哪个更好一些呢?或者继承自普通类和抽象类在应用上有何区别呢?今天主要来讨论这个问题。一、继承自普通类+virtual方法:譬如我设计了一个点的类(Point),这个“点”类其中包含X,Y两个基本公共属性。那么以后随着需求增加我或许要定义一个三维的店DPoint,由于从数学角度分析,三维坐标比二维坐标只是多了一个Z,其余属性基本相似。因此直接可以通过继承二维坐标的Point类扩展一个Z属性即可。进一步考虑。如果我已知一个点,输入另外一个点的坐标或者实体类,求该 阅读全文
posted @ 2012-11-19 13:38 Serviceboy 阅读(696) 评论(0) 推荐(1)