06 2012 档案

摘要:VS2010 有用的快捷键 : Ctrl + r, ctrl + w, 切换空格示。 阅读全文
posted @ 2012-06-27 16:53 小鱼1982 阅读(18536) 评论(0) 推荐(5)
摘要:1.The standard dispose idiom frees your unmanaged resources using the IDisposable interface when clients remember, and it uses the finalizer defensively when clients forget. It works with the Garbage Collector to ensure that your objects pay the performance penalty associated with finalizers only wh 阅读全文
posted @ 2012-06-27 16:28 小鱼1982 阅读(312) 评论(0) 推荐(0)
摘要:首先,对象分为值类型和引用类型,值类型在用完后是由操作系统自动回收的,引用类型由垃圾回收器回收,所以提到垃圾回收肯定是对引用类型来说的。垃圾回收机制是为了解决内存泄漏问题,即对象在用完后,其占用的内存没有被释放,使一个无用的对象不必要的占用了内存,导致不正常的内存减少甚至耗尽。以前有两种内存管理技术,一种COM开发人员熟悉的引用计数技术,一种C++开发人员熟悉的Delete语句,COM开发人员会遇到循环引用的问题,C++开发人员可能忘记Delete,这都会导致内存泄漏。垃圾回收器在两种情况下会进行回收,一是自动在适合的时间运行(如内存被耗尽,或Cpu空闲时),一种是显式调用GC.Collect 阅读全文
posted @ 2012-06-27 16:05 小鱼1982 阅读(363) 评论(0) 推荐(0)
摘要:是Attribute,还是Property?有时是个麻烦。Attribute和Property都可以翻译成“属性”,有的地方用Attribute表示“属性”,有的地方又在用Property,初学者常常在这两个单词间“迷失”,甚至认为二者没有区别,是一样的。可是Attribute不等于Property。二者之间到底有何区别?我们从OOA/OOD(Object Oriented Analysis / Object Oriented Design,面向对象分析与设计)说起。在OOA/OOD中的使用Attribute表示属性,指对象(Object)的特征(Feature)。我们在一些编程语言(如C#、 阅读全文
posted @ 2012-06-20 11:17 小鱼1982 阅读(208) 评论(0) 推荐(0)
摘要:@符号是特殊而又实用的C#符号。比如它在string中的应用。1字符@表示,其后的字符串是个“逐字字符串”(verbatim string)。//这个说法来自C#Primer中文版(Stanley B. Lippman,侯捷/陈硕合译)2对于逐字字符串字面变量(verbatim string literal ),我们不再需要使用“转义序列”就可以指定反斜线之类的特殊字符。@的这个特点使得在表示文件路径时很方便。如:string str = @"C:\Test.txt";3另外一点,用@表示的字符串能够跨越数行。这数行之内的空白字符(White Space)都会保留在字符串里 阅读全文
posted @ 2012-06-20 09:58 小鱼1982 阅读(496) 评论(0) 推荐(0)
摘要:using的用途和使用技巧. 1、 引用命名空间 2、 为命名空间或类型创建别名 3、 使用using语句 1、 引用命名空间,这样可以在程序中引用命名空间的类型而不必指定详细的命名空间. a) 比如在程序中常用的using System.Text; b) 引用命名空间,并不等于编译器编译时加载该命名空间所在的程序集,程序集的加载决定于程序中对该程序集是否存在调用操作,如果代码中不存在任何调用操作则编译器将不会加载using引入命名空间所在空间的程序集.因此,在源文件开头,引入多个命名空间,并非加载多个程序集,不会造成’过度引用’的弊端 2、 为命名空间或类型创建别名 ... 阅读全文
posted @ 2012-06-20 09:18 小鱼1982 阅读(2763) 评论(0) 推荐(1)
摘要:override1. override是派生类用来重写基类中方法的;2. override不能重写非虚方法和静态方法;3. override只能重写用virtual、abstract、override修饰的方法;4.不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。new1. new是派生类用来隐藏基类中的方法的;也就是说在派生类中“看不到”基类中的方法;2. 如果要在派生类中隐藏(不是重写)基类中的方法,而没有使用new关键字,编译时会出现一个警告,提示如果是要隐藏基类中的方法,请使用new关键字;3. 派生类可以隐藏基类中的虚方法, 阅读全文
posted @ 2012-06-18 17:35 小鱼1982 阅读(12762) 评论(5) 推荐(5)
摘要:先看下面这段代码的输出:classClassA{publicvirtualvoidWriteString(){Console.WriteLine("ClassA类virtualWriteString");}publicvoidWrite(){Console.WriteLine("ClassA类voidWrite");}}classClassB:ClassA{publicoverridevoidWriteString(){Console.WriteLine("ClassB类overridevoidWriteString");}publi 阅读全文
posted @ 2012-06-18 16:10 小鱼1982 阅读(354) 评论(0) 推荐(1)
摘要:一、override:Override关键字主要是提供派生类对基类方法的新实现。1、不可以用于重写非虚方法和静态方法2、与其配套使用的关键字是Virtual、abstract、Override。3、不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。二、new:new关键字可以在派生类中隐藏基类的方法,也就说在使用派生类调用的方法是New关键字新定义出来的方法,而不是基类的方法。在不使用New关键字来隐藏基类方法也是可以的,编译器会出现一个警告,提示如果有意去隐藏基类的方法,请使用New关键字修饰。可以对基类的虚方法、普通方法进行操作三、 阅读全文
posted @ 2012-06-18 15:38 小鱼1982 阅读(254) 评论(0) 推荐(0)
摘要:区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。抽象类中的abstract方法也不能有方法体。其他方法可以有方法体。区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相 阅读全文
posted @ 2012-06-18 13:08 小鱼1982 阅读(196) 评论(0) 推荐(0)
摘要:一、引言对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮助。有不少存疑的地方,诚心希望各位不吝赐教指正,共同进步。[最近首页之争沸沸扬扬,也不知道这个放在这合适么,苦劳?功劳?……]二、B-Tree我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。所以在最开始,简单地介绍一下B-Tree。B-Tree不同于Binary Tree(二叉树,最多有两个子树),一棵M阶的B-Tree满足以下条件:1)每个结点至 阅读全文
posted @ 2012-06-17 08:39 小鱼1982 阅读(189) 评论(0) 推荐(0)
摘要:TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作。语法TRUNCATE TABLE name参数name是要截断的表的名称或要删除其全部行的表的名称。注释TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。TRUNCATE TABLE 删除表中的所有行, 阅读全文
posted @ 2012-06-14 20:43 小鱼1982 阅读(220) 评论(0) 推荐(0)
摘要:当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;还有就是比较复杂的统计和汇总也要考虑,但是过多的使用存储过程会降低系统的移植性。为了系统的控制方便,例如当系统进行调整时,这是只需要将后台存储过程进行更改,而不需要更改客户端程序。也无需重新安装客户端应用程序。存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其威力和优势主要体现在: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次, 阅读全文
posted @ 2012-06-14 20:05 小鱼1982 阅读(189) 评论(0) 推荐(0)
摘要:使用泛型需要考虑的几个问题:1. 您所使用的类型是否包含或操作未指定的数据类型(如集合类型)?如果是这样,如果是这样,创建泛型类型将能提供更多的好处。如果您的类型只操作单一的指定类型,那么就没有必要去创建一个泛型类。2. 如果您的类型将操作值类型,那么就会产生装箱和拆箱操作,就应该考虑使用泛型来防止装箱和拆箱操作。3. 泛型的强类型检查有助于快速查找错误(也就是编译期而非运行期),从而缩短bug修复周期。4. 在编写多个类操作多个数据类型时是否遭遇到“代码膨胀”问题(如一个ArrayList只存储StreamReaders而另一个存储StreamWriters)?其实编写一次代码并让它工作于多 阅读全文
posted @ 2012-06-14 19:14 小鱼1982 阅读(607) 评论(0) 推荐(0)
摘要:什么是泛型(C#)所谓泛型是指将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。一种类型占位符,或称之为类型参数。我们知道一个方法中,一个变量的值可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显好处是——类型安全和减少装箱、拆箱。 例如:通常一个方法或过程的签名都是有明确的数据类型的。 如 : public void ProcessData(int i){} public void ProcessData(string i){} public void ProcessData... 阅读全文
posted @ 2012-06-14 19:04 小鱼1982 阅读(188) 评论(0) 推荐(0)
摘要:提起属性,我们都不陌生。它用起来就像访问public数据成员一样,但实际上是调用了内部定义的相应方法。通过使用属性保持了较好的数据封装,而且访问很方便,接下来我们共同复习以下CLR允许定义的两种属性:无参属性和有参属性(索引器)。一、 无参属性1. 定义属性无参属性就是我们最常见的属性方式,在赋值时可以加入一定的逻辑判断。属性的定义其实不复杂,先看个直观的例子:说明:属性要定义名称和类型,且类型不能是void。属性是不能重载的。我们不能定义名称相同、类型不同的两个属性。属性一般需要定义get和set方法来操作类内部的私有支持字段,如上面的_name, _age等。Set方法中包含隐藏参数叫做v 阅读全文
posted @ 2012-06-04 13:56 小鱼1982 阅读(267) 评论(0) 推荐(0)
摘要:使用索引器使用索引器,以数组风格访问对象声明get accessor控制索引器读取访问声明set accessor控制索引器写入访问在接口中声明索引器在从接口继承的结构和类中实现索引器引言类(结构)成员可以有很多,当用不同类型的单个私有字段时,用属性解决封装与隐藏问题——很好。但当类中的字段是一个数组时,会出现问题在程序中写如下语句较另人费解 bits&(1<<5)!=0 判断bits这个整数的第5位是否是1 bits&=~(1<<5) 设置bits这个整数的第5位清为0 bits|=(1<<5)设置bits这个整数的第5位置为1用户易于理解 阅读全文
posted @ 2012-06-04 13:54 小鱼1982 阅读(398) 评论(0) 推荐(0)
摘要:因为一般都用T-SQL来执行数据库操作,偶尔现在转到用存储过程,竟然写不来调用过程的返回值了,查了很多资料,都不详细,或者没到点上,也许是我比较笨,呵呵。C# 源代码1///<summary>2///校验用户3///</summary>4///<paramname="user">用户信息</param>5///<returns></returns>6publicstaticintVerifyUser(clsUseruser)7{8intiRet;9stringsql=String.Format(&quo 阅读全文
posted @ 2012-06-02 16:49 小鱼1982 阅读(173) 评论(0) 推荐(0)
摘要:游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力。我们可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。1.游标的组成游标包含两个部分:一个是游标结果集、一个是游标位置。游标结果集:定义该游标得SELECT语句返回的行的集合。游标位置:指向这个结果集某一行的当前指针。2.游标的分类游标共有3类:API服务器游标、Transaction-SQL游标和API客户端游标。其中前两种游标都是运行在服务器上的,所以又叫做服务器游标。API服务器游标API服务器游标主要应用在服.. 阅读全文
posted @ 2012-06-02 16:43 小鱼1982 阅读(155) 评论(0) 推荐(0)
摘要:Sql Server的存储过程是一个被命名的存储在服务器上的Transacation-Sql语句集合,是封装重复性工作的一种方法,它支持用户声明的变量、条件执行和其他强大的编程功能。存储过程相对于其他的数据库访问方法有以下的优点:(1)重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。(2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候不用再重新编译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。(3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。(4)安全性。参数化的存 阅读全文
posted @ 2012-06-02 16:34 小鱼1982 阅读(169) 评论(0) 推荐(0)
摘要:SQL触发器实例1 阅读全文
posted @ 2012-06-02 15:12 小鱼1982 阅读(175) 评论(0) 推荐(0)