摘要: @符号是特殊而又实用的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 阅读(478) 评论(0) 推荐(0) 编辑
摘要: using的用途和使用技巧. 1、 引用命名空间 2、 为命名空间或类型创建别名 3、 使用using语句 1、 引用命名空间,这样可以在程序中引用命名空间的类型而不必指定详细的命名空间. a) 比如在程序中常用的using System.Text; b) 引用命名空间,并不等于编译器编译时加载该命名空间所在的程序集,程序集的加载决定于程序中对该程序集是否存在调用操作,如果代码中不存在任何调用操作则编译器将不会加载using引入命名空间所在空间的程序集.因此,在源文件开头,引入多个命名空间,并非加载多个程序集,不会造成’过度引用’的弊端 2、 为命名空间或类型创建别名 ... 阅读全文
posted @ 2012-06-20 09:18 小鱼1982 阅读(2739) 评论(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 阅读(12712) 评论(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 阅读(337) 评论(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 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。抽象类中的abstract方法也不能有方法体。其他方法可以有方法体。区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相 阅读全文
posted @ 2012-06-18 13:08 小鱼1982 阅读(179) 评论(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 阅读(176) 评论(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 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;还有就是比较复杂的统计和汇总也要考虑,但是过多的使用存储过程会降低系统的移植性。为了系统的控制方便,例如当系统进行调整时,这是只需要将后台存储过程进行更改,而不需要更改客户端程序。也无需重新安装客户端应用程序。存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其威力和优势主要体现在: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次, 阅读全文
posted @ 2012-06-14 20:05 小鱼1982 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 使用泛型需要考虑的几个问题:1. 您所使用的类型是否包含或操作未指定的数据类型(如集合类型)?如果是这样,如果是这样,创建泛型类型将能提供更多的好处。如果您的类型只操作单一的指定类型,那么就没有必要去创建一个泛型类。2. 如果您的类型将操作值类型,那么就会产生装箱和拆箱操作,就应该考虑使用泛型来防止装箱和拆箱操作。3. 泛型的强类型检查有助于快速查找错误(也就是编译期而非运行期),从而缩短bug修复周期。4. 在编写多个类操作多个数据类型时是否遭遇到“代码膨胀”问题(如一个ArrayList只存储StreamReaders而另一个存储StreamWriters)?其实编写一次代码并让它工作于多 阅读全文
posted @ 2012-06-14 19:14 小鱼1982 阅读(592) 评论(0) 推荐(0) 编辑