摘要: 题目很有意思,在C#世界里,有一种实现叫做“显示实现”,它说的其实是对接口的实现方式,一般地,我们用到的实现都是隐示实现(VS里叫做实现接口)为什么我们没有用过“显示实现接口”呢?当类只继承一个接口时,显式实现接口与实现接口(我习惯称它为隐示实现)没有区别,如果你非要找个区别,那就是显示接口后,所有接口方法都必须是public,而“显示实现接口“则对类来说不是public,如果你需要用到接口方法时,在声明对象时,必须使用接口作声明,而如果使用“隐示实现接口”,则使用类或者接口作声明都是可以的。例如:显示实现接口,只能使用接口作声明,如果使用类作声明,那么接口中的方法由于在类中不是public, 阅读全文
posted @ 2013-05-09 10:45 于为 阅读(189) 评论(0) 推荐(0) 编辑
摘要: static修饰符我们不会陌生,它代表静态,可以修饰你的类,方法,字段和属性等等,今天主要说一个为静态字段加ThreadStatic特性会给程序代来什么样的变化。静态字段static field,我更习惯称它为“类的字段”,即它与类的具体实例无关,对于所有线程里,它的值都是一个,即它的唯一性。如代码:class Instance{ static DataContext context=new LinqToSql(conn); protected static DataContext {get{return context;}}}上面的代码中,context为静态字段,它的值在所有线程中都... 阅读全文
posted @ 2013-05-09 10:44 于为 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 网站bin目录下的程序集一般由系统项目,项目引用的外部DLL及外挂DLL组成,它们在网站运行时会自动加载,这一点很重要,项目本身DLL及项目引入的DLL会自动加载,这没有问题,而外挂在bin目录的DLL也会自动加载,这很重要,因为,它可以使我们的应用程序更加灵活,在开发通用功能上,也显得扩展性更强!一个例子,比如一个HttpModule,它是一个通用的功能,向页面添加一些缓存过期的共用信息,这对于你所有网站都是共用的,这时,可以建立一个HttpModule项目,它代码可能是这样namespace TestHttpModule{ public class SEOModule : IHttp... 阅读全文
posted @ 2013-05-09 10:43 于为 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 在 Visual Basic 中,数据类型是基于其类别实现。根据特定类型的变量存储的是自己的数据还是指向数据的指针,可以对 Visual Basic 数据类型进行分类。如果它存储的是自己的数据,则它是值类型;如果它保存指向内存中其他位置的数据的指针,则它是引用类型。值类型如果数据类型在它自己的内存分配中存储数据,则该数据类型就是“值类型”。值类型包括:所有数字数据类型Boolean、Char和Date所有结构,即使其成员是引用类型枚举,因为其基础类型总是SByte、Short、Integer、Long、Byte、UShort、UInteger或ULong每个结构是值类型,因此,即使它包含引用类 阅读全文
posted @ 2013-05-09 10:42 于为 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 你是否真正了解TransactionScope?相关文章将不确定变为确定~transactionscope何时提升为分布式事务将不确定变为确定~transactionscope何时提升为分布式事务~续将不确定变为确定~transactionscope何时提升为分布式事务~再续(避免引起不必要的MSDTC)一 了解事务选项,用它来控制嵌套事务 public enum TransactionScopeOption { //如果存在环境事务(我认为应该叫嵌套事务,氛围事务,ambient transaction),那么就加入其中, 如果不存在就创建新事务。如果... 阅读全文
posted @ 2013-05-09 10:41 于为 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 无论是.net还是java,在开发程序时都难免会用到throw关键字,对于初学者一般会认为它与try...catch捆绑在一起,这当然是错误的,事实上,throw的一个最重要的作用就是:让程序告诉用户一些事情,这些事情一般是开发人员之前定义好的,如对于一个输入文本框,你需要输入给定数字,但如果输入的不是给定的数据范围,则可以通过throw告诉用户!让程序告诉开发人员一些事情,这些事情一般是底层开发人员之前定义好的,如果一些业务规范,如果开发人员输入的不合法,程序就会抛出一个异常,以告诉表层开发人员!下面是一个程序中的throw用法: if (vp.ContainsKey("f... 阅读全文
posted @ 2013-05-09 10:40 于为 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 位运算无论在C#,VB还是在T-SQL里都有对它支持,位运算即对数值类型的每位进行计算,对于程序里,你可以使用十进制,十六进制,二进制对它进行位运算,事实上无论你使用哪种进制,对于计算机来说最后都为把它转换成二进制(0,1)的形式,因为二进制为简单,呵呵。下面是关于位运算的表格运算符号位运算操作符运算对象类型运算结果类型对象操作数实例~非运算整型整型1个~x&与运算2个x & y|或运算2个x | y^异或运算2个x ^ y<<左移运算2个x << 2>>右移运算2个x >> 2一般地,这种位运算中,我们的操作数多用于2的N次方的 阅读全文
posted @ 2013-05-09 10:39 于为 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 在时我们需要搞清楚一些值类型的初始值,即当你声明一个变量后,它事实上是有一个默认值的,下面选自MSDN:http://msdn.microsoft.com/zh-cn/library/83fhsxwc.aspx值类型默认值boolfalsebyte0char'\0'decimal0.0Mdouble0.0Denum表达式 (E)0 产生的值,其中 E 为 enum 标识符。float0.0Fint0long0Lsbyte0short0struct将所有的值类型字段设置为默认值并将所有的引用类型字段设置为null时产生的值。uint0ulong0ushort0下表显示了整型的大小 阅读全文
posted @ 2013-05-09 10:38 于为 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 首先,非常感谢赵老大的CodeTimer,它让我们更好的了解到代码执行的性能,从而可以让我们从性能的角度来考虑问题,有些东西可能我们认为是这样的,但经理测试并非如何,这正应了我之前的那名话:“机器最能证明一切”!费话就不说了,看代码吧: 1 /// <summary> 2 /// 执行代码规范 3 /// </summary> 4 public interface IAction 5 { 6 void Action(); 7 } 8 9 /// <summary> 10 /// 老赵的性能测试工... 阅读全文
posted @ 2013-05-09 10:37 于为 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 委托,一个不错的东西,.net中的委托用着挺爽,它的重要性以至于微软把它单拿出来,定义了几个现成的委托,如,Func和Action,既然人家把最特殊的委托签名拿 出来了,所以咱们就不自己去定义了,就用Func和Action委托去讲一个如何定义他们的实例吧,呵呵。第一 规规矩矩定义方法method1 /// <summary>2 /// 与Func<string>相同的方法签名3 /// </summary>4 /// <returns></returns>5 static string StandardFunc() ... 阅读全文
posted @ 2013-05-09 10:36 于为 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 事实上,本扩展主要是将linq中的lambda表达式的写法改为了传统的SQL写法Dynamic Expressions and Queries in LINQDatabase applications frequently rely on “Dynamic SQL”—queries that are constructed at run-time through program logic. The LINQ infrastructure supports similar capabilities through dynamic construction of expression trees 阅读全文
posted @ 2013-05-09 10:35 于为 阅读(229) 评论(0) 推荐(0) 编辑
摘要: .net中的事务可以分为显式的和稳式的,显式的就是说需要我们手动去指定事务的提交和回滚,而稳式的是.net帮助我们进行管理的,当你的事务代码段没有发生异常时,它会帮助我们进行提交,反之,进行事务加滚,这也是合情合理的。以下是MSDN中的说明:CommittableTransaction类为应用程序使用事务提供了一种显式方法,而不是隐式地使用TransactionScope类。与TransactionScope类不同,应用程序编写器需要明确调用Commit和Rollback方法以提交或中止事务。但是,只有事务的创建者才能提交事务。因此,通过Clone方法获得的可提交事务的副本不是可提交的。显式事 阅读全文
posted @ 2013-05-09 10:34 于为 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 众所周知,自从.net中出现了特性(attribute)之后,代码变得更加简洁,可读性更强了,今天主要说一下Conditional特性,Conditional它主要是约束你的代码段在哪种条件下进行执行,我们今天主要针对DEBUG和TRACE这两个条件约束,它们可以当作是Conditional特性的输入参数,形式如下:1 [Conditional("DEBUG")]2 protected static void LogDebugInfo()3 {4 //在debug模式输出一些调试信息5 Console... 阅读全文
posted @ 2013-05-09 10:33 于为 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 我之前写一篇关于事件订阅的文章(事件的好处~实现对修改的封闭,对扩展的开放!~续),但它主要是订阅静态事件,而今天主要讲的是实例事件,即,当一个事件发布者被实例化后,去订阅它里面的事件,然后当这个事件发布者去触发该事件时,自己执行你订阅的内容,这没什么可说的,一切都很正常。但在B/s系统中,常常都有这样一种需求,即:Order类中有方法GeneratorOrder,即生成订单的方法,这个方法会被UI层的很多方法调用,以实现对不同业务产品的购买,如:购买家电产品,购买成功后应该去和家电有关的成功页;而购买日常用品,成功后应该去与日常用户相关的页面;以后还会有其它业务产品的成功页,需要我们去实现。 阅读全文
posted @ 2013-05-09 10:32 于为 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 概念:一个对象的延迟初始化(也称延迟实例化)意味着该对象的创建将会延迟至第一次使用该对象时。延迟初始化主要用于提高性能,避免浪费计算,并减少程序内存要求。以下是最常见的方案:有一个对象的创建开销很大时,应用程序可能不会使用它。例如,假定您在内存中有一个Customer对象,该对象的Orders属性返回一个Orders对象。初始化Orders对象可能需要创建Orders对象的一个大数组(Orders[]),并可能需要数据库连接。如果用户从不访问Orders属性,则没有理由使用系统内存或计算周期来创建Orders对象。通过使用Lazy<Orders>将Orders对象声明为延迟初始化, 阅读全文
posted @ 2013-05-09 10:31 于为 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 当进行“与”运算时,从左向右比较,出现一个为false时,立即退出,不会比较后台的,即使后面的有异常程序也不报错 当进行“或”运算时,从左向右比较,出现一个为true时,立即退出,不会比较后台的,即使后面的有异常程序也不报错 List<int> arr = null; if ( arr != null && arr.Count > 0) //其实arr.Count会报语法错误,但这里是正确的用法,先比较是否为null,如果为空,后面的语句则不会被执行 Console.WriteLine("ok"); else ... 阅读全文
posted @ 2013-05-09 10:30 于为 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 一个人(people),在他60岁之后,就宣布进入晚年了,在这个期间要多注意身体,多体检。namespace NET基础才是重中之重{ /// <summary> /// 人类 /// </summary> public class People { private int age; public string name = "张占占"; //姓名 public string gander = "男"; // 性别 #region 构造方法 public People... 阅读全文
posted @ 2013-05-09 10:29 于为 阅读(170) 评论(0) 推荐(0) 编辑
摘要: .NET中使用stack(栈)和heap(堆)两种结构在内存中存储数据,今天咱们就来说说这两个结构Value Types,值类型 在C#中,值类型继承自System.ValueType的,它们分别是 Bool, byte , char, decimal, double, enu, float, int, long, sbyte, short, struct, uint, ulong, ushortReference Types 引用类型引用类型包括所有的从System.Object继承下来的类型,它们分别是 class, interface, delegate, object,string,其 阅读全文
posted @ 2013-05-09 10:28 于为 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 很多人都不用var,说它在运行时会影响程序的性能,比如下面两个var i = 10; // implicitlyint i = 10; //explicitly说强类型比隐式类型的运行时效率高,其实不是这样的,这两行代码运行时效率一样,因为var是在编译时由编译器把它解释成强类型的。从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型 var。 隐式类型的本地变量是强类型变量(就好像您已经声明该类型一样),但由编译器确定类型。所以,以后大家可以放心的用var了,呵呵,只是程序可读性不如强类型。最后说一名,对不起“var",我之前一直冤枉你了。 阅读全文
posted @ 2013-05-09 10:27 于为 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 我们挂在嘴过的一句话就是“static是静态对象,在类第一次被使用,或者第一次被实例化时执行“,但是你是否真正理解这句话,或者说你是否有对这句话进行一个实际的验证,如果没有,那我来带您完成这次旅行吧!首先有一张表,不会经常发生变化,比如分类表,他是一种树型结构表,结构可能是这样 1 /// <summary> 2 /// 分类表 3 /// </summary> 4 public partial class Common_Category : IDataEntity 5 { 6 //初始字段 7 #region o... 阅读全文
posted @ 2013-05-09 10:26 于为 阅读(188) 评论(0) 推荐(0) 编辑