随笔分类 - C#
摘要:偶然看到的,记录一下,以免忘记字符串:string s = "1,2,3,4,5,"目标:删除最后一个 ","方法: 1、用的最多的是Substring,这个也是我一直用的 s = s.Substring(0,s.Length -1) 2、用 RTrim,这个我原来只知道用来删除最后的空格,也没有仔细看过其它的用法,才发现可以直接trim掉一些字符 s = s.ToString().RTrim(',') 3、用TrimEnd,这个东西和RTrim差不多,区别是这个传递的是一个字符数组,而RTrim可以是任何有效的字符串s=s.TrimEn
阅读全文
摘要:设计模式的概念:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式的原则:为什么要提倡"Design Pattern"呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?面向对象有几个原则:开闭原则(Open Closed Principal,OCP):通俗的说就是在不修改现有代码的基础上,引入新功能。里氏代换原则(LSP):任何基类可以出现的地方,子类一定可以出现。依赖倒转原则(DIP):抽象不应该依赖于细节,细节应当依
阅读全文
摘要:常见的选择排序细分为简单选择排序、树形选择排序(锦标赛排序)、堆排序。本章所说的选择排序为简单选择排序。选择排序基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序的特点:1. 选择排序是不稳定的排序方法。2.n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。3.选择排序最好情况是,已经有序,交换0次;最坏情况是,逆序,交换n-1次。4.选择排序交换次数比冒泡排序少多了,所以选择排序比冒泡排序快。下面通过一个例子来了解快速排序的具体含义:{ 40,29,49,37,5,78,23,11,4}第一
阅读全文
摘要:快速排序(Quicksort)是对冒泡排序的一种改进。快速排序的基本概念是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面通过一个例子来了解快速排序的具体含义:{ 23, 45, 60, 10, 17, 101,12}第一遍排序:由此思想,我们可以实现快速排序的代码:注意基准数据永远不变,永远是和基准数据进行比较,无论在什么位置,最后的目的就是把基准数据放在中间,小的放前面大的放后面。namespace QuickSort{ cla...
阅读全文
摘要:冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。冒泡排序有两个很明显的优势:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。下面通过一个例子来了解冒泡排序的具体含义:{130, 28, 345, 299, 40, 30, 201}第一遍循环:由此思想,我们可以实现冒泡排序的代码:namespace BubbleSort{ class Program { pr...
阅读全文
摘要:什么是数组?数组是一种数据结构,包含同一个类型的多个元素。数组的声明:int[] myIntArray; 注:声明数组时,方括号 ([]) 必须跟在类型后面,而不是变量名后面。在 C# 中,将方括号放在变量名后是不合法的语法。数组的初始化:我们知道数组是引用类型,所以需要给他分配堆上的内存。1.myIntArray = new int[3];2.myIntArray = new int[] { 1, 2, 3 };3.int[] myIntArray = { 1, 2, 3 }; //当使用这种方法对数组进行初始化时,只能在声明变量数组时使用,不能在声明数组之后使用。数组的访问:数组在声明和初
阅读全文
摘要:本文意在巩固基础知识,并不是对其进行深入剖析,还望理解。
本文是对此项知识的整理文,有些内容来源于网络,其他为博主原创,所以难免会有一些小得瑕疵,敬请谅解。
所有示例均是博主测试过的,如有转载请标明出处,谢谢。
值类型与引用类型是很基础的知识,也有很多对此的介绍,如果想深入了解,张老师的博客讲解的很好,链接如下:
http://www.cnblogs.com/JimmyZhang/archive/2008/01/31/1059383.html
我在这里只是浅浅的介绍一下下:
从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。
我们知道,C#中的每一种类型要么是值类型,要么是引用类型。所以每个对象要么是值类型的实例,要么是引用类型的实例。
阅读全文
摘要:本文意在巩固基础知识,并不是对其进行深入剖析,还望理解。本文为原创文,难免会有一些小得瑕疵,敬请谅解。所有示例均是博主测试过的,如有转载请标明出处,谢谢。结构是使用 struct 关键字定义的,与类相似,都表示可以包含数据成员和函数成员的数据结构。一般情况下,我们很少使用结构,而且很多人也并不建议使用结构,但作为.NET Framework 一般型別系统中的一个基本架构,还是有必要了解一下的。结构的特征:结构是一种值类型,并且不需要堆分配。结构的实例化可以不使用 new 运算符。在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。结构类型永远不是抽象的,并且始终是隐式
阅读全文
摘要:本文意在巩固基础知识,并不是对其进行深入剖析,还望理解。本文为原创文,难免会有一些小得瑕疵,敬请谅解。所有示例均是博主测试过的,如有转载请标明出处,谢谢。在编程中,我们经常会用到接口,那什么是接口呢?接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。接口使用interface 关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。接口的特性:1.接口类似于抽象基类,不能直接实例化接口;接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员:当显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通
阅读全文
摘要:overload:重载指的是同一个类中有两个或多个名字相同但是参数不同的方法,(注:返回值不能区别函数是否重载),重载没有关键字。override:过载也称重写是指子类对父类中虚函数或抽象函数的“覆盖”(这也就是有些书将过载翻译为覆盖的原因),但是这种“覆盖”和用new关键字来覆盖是有区别的。new:覆盖指的是不同类中(基类或派生类)有两个或多个返回类型、方法名、参数都相同,但是方法体不同的方法。但是这种覆盖是一种表面上的覆盖,所以也叫隐藏,被覆盖的父类方法是可以调用得到的。重载覆盖的发生条件:重载,必然发生在一个类中,函数名相同,参数类型或者顺序不同构成重载,与返回类型无关重写,必然发生在基
阅读全文
摘要:若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法。虚方法与非虚方法的最大不同是,虚方法的实现可以由派生类所取代,这种取代是通过方法的重写实现的(以后再讲)虚方法的特点:虚方法前不允许有static,abstract,或override修饰符虚方法不能是私有的,因此不能使用private修饰符虚方法的执行:我们知道一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,而虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数,其中那个申明时定义的类叫申明类,那个执行时实例化的类叫实例类。如:A a
阅读全文
摘要:本文意在巩固基础知识,并不是对其进行深入剖析,如若对各位高手没有什么作用,请绕过。本文为原创文,难免会有一些小得瑕疵,若是有故意找茬者,请勿评论,以免有伤和气。所有示例均是博主测试过的,如有转载请标明出处,谢谢。抽象类:有时我们表达一些抽象的东西,它是一种概括,不需要它成为一种实体,所以面向对象便有了抽象类。具体来讲:一个员工,它属于一个公司,但是公司只是一个名称,我们不需要它成为一个实体,所以公司就是一个抽象类。何时必须声明一个类为抽象类?(面试题)当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。抽象类的特点:抽象类使用abstract修饰符,并且它只能是用作基类。抽象类不
阅读全文
摘要:本文意在巩固基础知识,并不是对其进行深入剖析,如若对各位高手没有什么作用,请绕过。本文为原创文,所有示例均是博主测试过的,欢迎大家批评指正,如有转载请标明出处,谢谢。继承、封装和多态是面向对象编程的重要特性。其成员被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。派生类隐式获得基类的除构造函数和析构函数以外的所有成员。派生类只能有一个直接基类,所以C#并不支持多重继承,但一个基类可以有多个直接派生类。继承是可以传递的。即:如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,则 ClassC 会继承 ClassB 和 ClassA 中声明的成员。classA{p
阅读全文
摘要:构造函数分为:1.实例构造函数2.私有构造函数3.静态构造函数构造函数是一种特殊的方法,主要是为了给初始化对象赋初值。1.实例构造函数使用new表达式创建某个类的对象时,会使用实例构造函数创建和初始化所有实例成员变量。publicclassProgramTest{intj;publicProgramTest(){j=4;Console.WriteLine("IamProgramTest,{0}", j);}staticvoidMain(string[]args){ProgramTestpt=newProgramTest();Console.Read();}结果为:I am
阅读全文
摘要:C#4.0中新加了几种参数,今天来了解一下:1.缺省参数:C# 4.0现在对方法,构造器,以及索引器支持使用可缺省的参数当参数的默认值作为声明的一部分被指定的时候,参数就是可缺省的。staticvoidChangeValue(intx,inty=3) //int y 有一个默认的参数3,因此它是一个可缺省的参数{ inttemp=x;x=y;y=temp;}当调用它的时候,我们可以显示的传递给它两个参数: inti=2;intj=4;ChangeValue(i,j);或者我们可以省略掉传递第二个参数,在这样的情形下,其默认值3就会被传进去: inti=2;ChangeValue(i)...
阅读全文
摘要:·C#中方法的参数有四种类型: 1. 值参数 (不加任何修饰符,是默认的类型)2. 引用型参数 (以ref 修饰符声明) 3. 输出参数 (以out 修饰符声明) 4. 数组型参数 (以params 修饰符声明)1. 值传递: 值类型是方法默认的参数类型,采用的是值拷贝的方式。也就是说,如果使用的是值类型,则可以在方法中更改该值,但当回调方法时,不会保留更改的值。 staticvoidChangeValue(intx,inty){inttemp=x;x=y;y=temp;}staticvoidMain(string[]args){inti=1,j=2;ChangeValue(i,j)
阅读全文
摘要:类(Class) 面向对象思想来源于对现实世界的认知。现实世界缤纷复杂、种类繁多,难于认识和理解。但是聪明的人们学会 了把这些错综复杂的事物进行分类,从而使世界变得井井有条。比如我们由各式各样的汽车抽象出汽车的概念,由形形色色的猫抽象出猫的概念,由五彩斑斓的鲜花 抽象出花的概念等。汽车、猫、鲜花都代表着一类事物。每一类事物都有特定的状态,比如汽车的品牌、时速、马力、耗油量、座椅数,小猫的年龄、体重、毛色, 鲜花的颜色、花瓣形状、花瓣数目,都是在描述事物的状态。每类事物也都有一定的行为,比如汽车启动、行驶、加速、减速、刹车、停车,猫捉老鼠,鲜花盛开。 这些不同的状态和行为将各类事物区分开...
阅读全文
摘要:BackgroundWorker 类基本概念注意:此类在 .NET Framework 2.0 版中是新增的。BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。使用方法:可以通过编程方式创建 BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。如果在 Windows 窗体设计器中创建 BackgroundWorke
阅读全文
摘要:互斥: 在操作系统中,许多线程常常需要共享资源,而这些资源往往要求一次只能为一个线程服务(排他性),这种排他性地使用共享资源称为线程间的互斥。线程互斥实质上也是同步,可以看做一种特殊的线程同步。Mutex类:线程的互斥常用Mutex类实现,利用它可以对资源进行独占性访问。与Monitor类相似,只有获取Mutex对象的所属权的线程才能进入临界区,未获得Mutex对象所属权的线程只能在临界区外等待。使用Mutex类要比使用Monitor类消耗更多的系统资源,但它可以跨越应用程序边界,在多个应用程序之间进行同步。Mutex类的部分方法:WaitOne():请求互斥体的所属权,只有请求道所属权后线程
阅读全文
摘要:Monitor类提供同步对对象的访问的机制。lock语句就是由编译器解析为使用Monitor类。例如:lock(obj) {.........}解析为Monitor.Enter ()方法,该方法会一直等待,直到线程获得对象的锁定为止。那么如何解除锁定呢?Monitor类提供了Exit()方法解除锁定。 Monitor类具有以下功能: 它根据需要与某个对象相关联。它是未绑定的,也就是说可以直接从任何上下文调用它。不能创建 Monitor 类的实例。Monitor类的方法: Enter,TryEnter:获取对象锁。此操作同样会标记临界区的开头。其他任何线程都不能进入临界区,除非它使用其他锁定对
阅读全文