Fork me on GitHub
摘要: 前言前几日同学告诉我他老师告诉他,泛型是定义一种通用的方法,至于为什么用泛型他的答案还是定义一种通用的方法,当时我也没有学,还不懂啦,毕竟人家是计算机专业的科班生,我当然没有发言权,只是怀疑的记下了这个错误的结论打算以后看看是不是对的,这两天算是把泛型学了一下,其实它定义的不只是方法,自己感觉他就是一种规范代码执行效率的模版,这样极不容易出错,并把我们常用的箱拆箱操作过程给省了,提高了编译器的执行效率,。至于为什么用泛型这个我貌似已经说明白了,泛型多用于集合类操作,我在这里随意的拿出C#定义的ArrayList的Add方法的定义我们一起看看:publicvirtualintAdd(Object 阅读全文
posted @ 2012-03-08 09:59 Halower 阅读(966) 评论(0) 推荐(2) 编辑
摘要: 在许多情况下,重载运算符允许生成可读性更高、更直观.我认为即便是你学什么语言的编程你都在有意无意的接触过编译器预定义的运算符重载只是没有那个概念罢了,下面是我在学习过程中的总结。运算符的工作方式 :为了理解运算符是如何重载的,我先了解一下编译器遇到运算符时会做怎么的处理,我们用相加运算符+作为例子来讲解。假定编译器遇到下面的代码:int a = 1;uint b = 2;double c = 3.0;long l = a + b;double d = a+c;long l = a + b;编译器知道它需要把两个整数加起来,并把结果赋予long。调用一个方法把数字加在一起时,表达式a+b是一种非 阅读全文
posted @ 2012-03-08 09:23 Halower 阅读(1927) 评论(2) 推荐(2) 编辑
摘要: T-SQL中的11个流程控制语句关键字 在T-SQL中,与流程控制语句相关的关键字有11个:BEGIN...ENDBREAKGOTOCONTINUEIF...ELSEWHILERETURNWAITFORCASLERAISEERROR和PRINTBEGIN…END关键字BEGIN…END也是流程控制语句需要用到的最基本关键字,用于将多个语句划分成逻辑上的一部分。其实可以直接理解成Delphi的begin...end 或者C类语言的{},用于按块(block)顺次执行多条语句。IF..ELSE关键字IF..ELSE关键字实现了非此既彼的逻辑。和高级语言中的IF..ELSE具有完全一样的使用方法,这 阅读全文
posted @ 2012-03-07 22:41 Halower 阅读(1544) 评论(0) 推荐(0) 编辑
摘要: 对于抽象类,只需要将它看成一种其他类实现某些功能的模版,例如我们定义一个事物模版,那么它有身高,体重,语言,国籍,语言......这样的一系列的特征我们知道他应该描述的是一个人,只要我们将这些特性一一赋值,就能知道这个事物的具体存在。因此我们不能实例化这个模版(不能使用new关键字),他不代表任何一个现实的存在,只是为利用它而进行实例化的实例提供了若干接口,因为他是模版所以不能私有化,即不能使用private关键字。同时抽象方法隐含为virtual方法,以重写(override)的方式达到实例化的目的,但是不能使用virtual关键字。 在对抽象类测试的过程中,我发现了如下特性:1.抽象类.. 阅读全文
posted @ 2012-03-07 20:30 Halower 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 认识触发器:触发器是一种特殊的存储过程,它不能被显示的调用,而是在往表中插入记录,更改记录或者删除记录时,被自动激活。在触发器中可以查询其他表,也可以执行更复杂的T-SQL语句。如果执行的T-SQL语句执行了一个非法操作,则可以通过回滚事务使语句不能执行,并返回到事务执行前的状态,Microsoft SQL Server 允许为任何给定的 INSERT、UPDATE 或 DELETE 语句创建多个触发器。触发器的作用:◎触发器可以对数据库进行级联修改◎触发器可以完成比CKECK约束更复杂的限制◎触发器可以发现改变前后表中数据的不同,并根据这些不同来进行相应的操作。◎对于一个表上的不同操作(IN 阅读全文
posted @ 2012-03-07 20:29 Halower 阅读(928) 评论(1) 推荐(4) 编辑
摘要: 原理:当需要在内部类的内部访问外部类实例时,可以将代表外部类的实例的this关键字作为一个参数传递给内部类,这样就可以实现在内部类的内部访问外部类实例,其实质还是在内部类中用外部类的实例去访问自身的方法而已。如下我写的实例主要是看卡这种效果,可以参考一下: using System;namespace TestinerClass{ class OutClass { string name = "外部类实例字段"; public void display() { Console.WriteLine("调用外部实例方法!... 阅读全文
posted @ 2012-03-07 20:29 Halower 阅读(3339) 评论(0) 推荐(0) 编辑
摘要: 它与this关键字一样,都是作为类的实例(因此不能调用基类的静态成员和抽象成员)简写或者替代而存在的,只不过this关键字用于替代本类的实例,base关键字用于替代基类的实例,用法很简单,其访问基类的形式如下:base.【标识符】 base[【表达式列表】] 这个类型的一看便可以大概猜测多用于基类实例的索引器操作,在我下面演示的代码中你会看到它的用法。对于 base.【标识符】的访问形式再次说明一下:对于非虚方法,这种访问仅仅是对基类实例成员的直接访问,完全等价于((base)this).【标识符】。对于虚方法,对于这种访子类重写该虚方法运用这种访问形式也是(禁用了虚方法调用的机制)对基类实. 阅读全文
posted @ 2012-03-07 20:21 Halower 阅读(509) 评论(0) 推荐(0) 编辑
摘要: 密封类就是将一个类封闭起来,断其子孙的一种方式。书面点说,就是从所修饰的类派生出其他类,所以一个密封类是没有也不能继承的类,因此sealed关键字和abstract关键字不能同时使用。 密封方法则不是为了防止继承而是防止重写,而且它是为了重写基类的虚方法并提供具体的实现,同时防止其后继类(派生类)再次重写该虚方法因此在密封方法中sealed关键字总是和override关键字同时使用。这些都很简单但是代码总结起来还是不够直观,必须实际感受下: 1 using System; 2 3 namespace SealClassTest 4 { 5 public sealed class S... 阅读全文
posted @ 2012-03-07 20:21 Halower 阅读(3198) 评论(0) 推荐(0) 编辑
摘要: 一.隐式转换从任何引用类型到object。从任何类A到其基类B(或着后续基类),也即A派生自B。从任何实现I接口的类A到接口I.从任何接口I1到其基接口I2(或着后续基接口)。 二.显式转换从object到任何其它引用类型。从基类B到其子类A.从任何类A到任何接口I(类A不能被密封,A不实现接口I)从任何接口I到任何类B(类B实现接口I,切不密封)从任何接口I2到任何接口I1(前提是接口I2不是I1派生的) 测试代码如下:using System;namespace ConvertClass{ interface IDatabase { void Query(); } interface IF 阅读全文
posted @ 2012-03-07 20:20 Halower 阅读(746) 评论(0) 推荐(0) 编辑
摘要: 类可以看做是创建一组对象的模版,类似的接口可以看做创建一组类的模版。一个类可以实现多个接口,从而实现多重继承。接口使得服务协议与实现相分离,是组件编程的基础,是组件向外公布其功能的唯一方法。 接口的设计原则是:一旦发布一个接口就不能再更改它,但是可以通过继承扩展新的接口。接口成员的特点(以下在学习中的总结):1.接口成员都是public类型的,但是不能使用public修饰符。2.接口成员的声明不能包含new之外的其他任何修饰符。3.接口不能包含常量,字段,运算符,静态成员(这些与抽象方法不同),实例构造函数,析构函数或类型。4.接口修饰符只允许使用new,public,protected,i. 阅读全文
posted @ 2012-03-07 20:20 Halower 阅读(600) 评论(0) 推荐(0) 编辑
摘要: 异常类型的类别基类 Exception 下存在两类异常:从 SystemException派生的预定义公共语言运行库异常类。从 ApplicationException派生的用户定义的应用程序异常类。Exception 包含很多属性,可以帮助标识异常的代码位置、类型、帮助文件和原因:StackTrace、InnerException、Message、HelpLink、HResult、Source、TargetSite 和 Data。 以下我开始对这几个属性开始测试代码演示如下: Code 1 using System; 2 3 namespace Uer_Test 4 { 5 cl... 阅读全文
posted @ 2012-03-07 20:19 Halower 阅读(1817) 评论(0) 推荐(0) 编辑
摘要: as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而非引发异常。as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用强制转换表达式来执行。expression as type等效于(但只计算一次 expression)expression is type ? (type)expression : (type)nullas 运算符用于在兼容的引用类型之间执行转换。例如:// cs_keyword_as.cs// The as operator.using System;class Class1{}class Clas 阅读全文
posted @ 2012-03-07 20:19 Halower 阅读(648) 评论(0) 推荐(0) 编辑
摘要: 1.拆分字符串 1.1 以下例举一个拆分句子的demo:using System;using System.Text.RegularExpressions;namespace RegexSplit{class Program{ public static void Main(string[] args) { Console.WriteLine("请输入要分拆的字符串,并按Enter键确认。"); string input=Console.ReadLine(); string pattern=@"\.|,|:|;|。|,|:|;"; string[] rs 阅读全文
posted @ 2012-03-07 20:18 Halower 阅读(451) 评论(0) 推荐(1) 编辑
摘要: 边关魂不尽风霜无限度,断崖红云鹤边飞。紫日红缨军家鼓,大喝一声入关去。 阅读全文
posted @ 2012-03-07 20:18 Halower 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 这两天太懒了昨晚又通宵玩了一夜游戏今天补睡了一天,所以进度慢了点,不过也没啥,每天进步一点点就行了,哈哈。我在前面介绍了数组,有些网友问我咋把数组放到集合里讨论,其实数组就是我们最常用的一种集合,所有的数组都是从System.Array类继承下来的,今天其实主要的内容是集合构造的效率问题,也就是我今天的主题----扩容。今天只以ArrayList为例,但是它适用与所有的集合(当然包括数组)。书面一点说就是System.Collections命名空间中的所有集合在到达当前的容量时都会自动扩容,内存被重新分配,元素从旧的集合复制到新的集合,这虽然减小了所需代码,但是集合的性能会有所降低,避免这种. 阅读全文
posted @ 2012-03-07 20:17 Halower 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 这几日太忙了,复习专业课,忙了几日其实也没认真看书,呵呵,下面再说一下事件,这个便是只要你真正理解了这个也就是委托的一种特例,是一种特殊的委托类型(也可以看作一个字段但是依旧返回的是委托类型,为什么呢,因为即便是stringstr ,str依旧是一个string类型 的参数),这个只要自己理解就不难了,问人根本解决不了问题和疑惑,昨日开始看时问了几个开发了几年的程序员一个问题,他们也是回答摸棱两可,最后没办法还是自己搞定了。由于马上要上课去了,我只能在中午画了一个思维图和写的一个Demo给大家看一下我的思路,如有不同见解可以留言以便讨论。示例如下:using System;namespac.. 阅读全文
posted @ 2012-03-07 20:17 Halower 阅读(1267) 评论(3) 推荐(1) 编辑
摘要: System.Text.RegularExpressions 命名空间提供正则表达式功能,主要包括7个类。他们的关系如右图,对于他们的功能很多书和网上资料写的很复杂,其实理一理还是很简单的。我分了四部分来定义:定义正则表达式:Regex类返回匹配结果:MatchCollection类 和 Match类返回捕获组的结果:GropCollection类 和 Group类返回执行捕获的结果结果:CaptureCollection类 和 Captrue类 同时后三个相对的都是集合与子集的关系了。Regex类的方法和属性都很简单,主要是对构造函数的运用不同,也不容易混淆,就不多言了。Match类 可以使 阅读全文
posted @ 2011-11-19 22:38 Halower 阅读(1223) 评论(0) 推荐(1) 编辑
摘要: 刚刚看了一下正则表达式,感觉很基础的简单但是要是精通还是要花时间,但是是一门独立性很强的检索规则表达式的语言,所以整合可利用的资源下再研究一下。 正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求。下面记录一些常用的元字符。先把资料都贴上,有时间细细研究。正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式匹配/^\s*$/匹配空行。/\d{2}-\d{5}/验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。/<\s*(\S+)(\s[ 阅读全文
posted @ 2011-11-17 01:30 Halower 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 刚刚看MSDN的一个例子无意发现的小技巧,大家一看就明白了,不过好像蛮有用的,先记下咯,以后慢慢研究。using System;namespace NewLine{ class Test { static void Main() { string s1 = "白日依山尽"; string s2 = "黄河入海流"; string s3 = "欲穷千里目"; string s4 = "更上一层楼"; Console.WriteLine("{0}{1}{0}{2}{0}{3}{0}{4}",Envi 阅读全文
posted @ 2011-11-14 23:13 Halower 阅读(287) 评论(0) 推荐(1) 编辑
摘要: C#支持两种字符串:规则字符串和逐字字符串。我先前看到@+“”这种结构处理字符串的时候,也就只是记下怎么用而已,其实这就是标准的逐字字符串,而且分隔符之间的字符逐字解释,唯一例外的就是引号。在逐字字符串中字符串不处理简单转义序列及十六进制和Unicode转义序列,而且可以跨多行。例如: static void Main(string[] args) { string s = "这个专业\"老师\"太垃圾了!"; string s1 = @"这个专业""老师""太垃圾了!"; Console.Wr 阅读全文
posted @ 2011-11-14 22:50 Halower 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 迭代器是一种方法、get 访问器或运算符,它通过使用 yield 关键字对数组或集合类执行自定义迭代。yield 返回语句会导致源序列中的元素在访问源序列中的下一个元素之前立即返回给调用方。尽管您以方法的形式编写迭代器,但编译器会将其转换为一个实际上是状态机的嵌套类。只要客户端代码中的 foreach 循环继续进行,此类就会跟踪迭代器的位置。 将使用 foreach 语句从客户端代码中调用迭代器。在为类或结构创建迭代器时,您不必实现整个 IEnumerator 接口。当编译器检测到迭代器时,它将自动生成 IEnumerator 或 IEnumerator<(Of <(T>)& 阅读全文
posted @ 2011-11-13 21:24 Halower 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 我们可以通过实现System.Collections.IEnumerableSystem.Collections.IEnumerator接口写出自己需要的集合类。下面写两种设计实现自定义Library集合类的方法: using System;using System.Collections;namespace Library{ class Library : IEnumerable//实现接口IEnumerabler { protected class Enumerator : IEnumerator//实现接口IEnumerator { private string exceptionIn. 阅读全文
posted @ 2011-11-13 18:38 Halower 阅读(415) 评论(0) 推荐(0) 编辑
摘要: Queue(队列)表示对象的先进先出集合,默认初始容量32。usingSystem;usingSystem.Collections;namespacetQueue{classTest{staticvoidMain(){Queuequeue=newQueue();queue.Enqueue("广告史");queue.Enqueue("市场调研");queue.Enqueue("传播学");Console.WriteLine("队列开始处是{0}",queue.Peek());Console.WriteLine(que 阅读全文
posted @ 2011-11-13 13:34 Halower 阅读(261) 评论(0) 推荐(0) 编辑
摘要: Hashtable将添加的元素存放在System.Collections.DictionaryEntry对象里,因此使用foreach或者IEnumerator的Current属性时,都应该将Hashtable中的元素转换为DictionaryEntry对象。可以使用键值作为索引来往问Hashtable中的元素,当检索值时,健再次被散列,并将得到的散列值作为索引来检索值在表中的位置。Add方法用来将健/值对添加到Hashtable中,即健被散列,散列值作为值插入表中的位置,用来标识存储位置,Hashtable的健不能为空但是值可以是空引用。首先演示一下Hashtable的使用:usingSys 阅读全文
posted @ 2011-11-12 22:49 Halower 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 来年把太阳送给你我的人生注定要像海一样­我不喜欢平静­那才将是我的归宿­ 来年不再...­ 如果你到了南方­记得去海边­ 看此时的日出­ 阅读全文
posted @ 2011-11-11 21:59 Halower 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 静飘移,静飘移,沟沟坎坎静飘移。千沟壑,万鸿沟,沟沟坎坎静飘移。静飘移,心思过, 春风得意浮尘起。 阅读全文
posted @ 2011-11-10 23:34 Halower 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 歌名:梦忧伤作词:Rohelm.X脚跟脚尖触痛了街头行人接踵心却冷漠冰凉忧郁的眼神忘却了微风拂面发梢间风筝在风中寂寞的摇曳城市拐角的车窗折射出一片美好的梦转瞬间却成了一篇忧伤噢......梦忧伤......曾经校园我的霸道早已悄然隐去故里留下的美好依然让街头的忧伤覆盖路灯的昏暗又是一片童年的记忆忘却的是失意那虚伪利用的情感噢......梦忧伤.......脚跟脚尖触痛了街头行人接踵心却冷漠冰凉忧郁的眼神忘却了微风拂面发梢间风筝在风中寂寞的摇曳城市拐角的车窗折射出一片美好的梦转瞬间却成了一篇忧伤噢......梦忧伤......曾经校园我的霸道早已悄然隐去故里留下的美好依然让街头的忧伤覆盖路灯的昏 阅读全文
posted @ 2011-11-09 18:25 Halower 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 网上查了下资料,发现没我想知道东西,只能自己研究一下,关于枚举的详细由于晚上还有点事,就不怎么写了下面我给大家演示一下Eum类中几种方法Enum.IsDefined,Enum.Parse,Enum.GetName,Enum.GetNames,Enum.GetValues. 先说一下System.Enum类,它是所有枚举类型的抽象基类(它是一种与枚举类型的基础类型不同的独特类型),所有的枚举类型都是从它派生的,存在所有的枚举类型和Enum类的装箱和拆箱转换。简单说一下,直接上代码了:以下代码最好自己复制运行一下,否则可能看不明白:using System;public class EnumTe. 阅读全文
posted @ 2011-11-08 21:37 Halower 阅读(2993) 评论(0) 推荐(1) 编辑
摘要: 结构和类很相似,也可以包含数据成员和函数成员,但是与类不同,结构是一种值类型,(我们可以理解为一种特殊的值类型所以不存在继承的问题)为其分配数据不需要从托管堆中分配存储器。结构类型的变量直接包含了该结构的数据,而类类型的变量所包含的只是对相应对象的一个引用。下面总结一下结构和类的不同:l结构是值类型,对结构类型的变量赋值将创建所赋值的一个副本。l结构实例的默认值不是null,而是具有默认值的初始值。l在结构和类中this的意义不一样。l结构不支持继承(所以结构成员的声明可访问性不能是protected,protected internal,结构中的函数成员不能是abstract 或者virtu 阅读全文
posted @ 2011-11-07 20:43 Halower 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 以下是System.Nullable<T>在FCL中的定义。 Code 1 [Serializable, StructLayout(LayoutKind.Sequential)] 2 public struct Nullable<T> where T :struct 3 { 4 private Boolean hasValue= false; 5 internal T value= default(T); 6 7 public Nullable(T value) 8 { 9 this.value= value;10 this.hasValue= true;11 }12 阅读全文
posted @ 2011-11-05 17:17 Halower 阅读(439) 评论(0) 推荐(1) 编辑