线程与任务

线程线程与进程的区别: 进程:是计算机中已运行的实体。在面向线程设计的系统(当代多数系统)中,进程本身不是基本运行单位,而是线程的容器。线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每...

2017-11-05 15:45:35

阅读数 185

评论数 0

特性和反射

特性特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。我们可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。 特性(Attribute)用于添加元数据,如编译器指令和注...

2017-10-19 23:02:58

阅读数 103

评论数 0

LINQ集合操作

LINQ是一个用于操作集合的语法,它能够查询一个集合里的字段,并且能够分组、排序,除此之外还有其他的功能。它的语法规则和SQL语言非常相似。在一个集合中,我们想要得到集合里满足特定条件下的集合,通常情况下我们会用foreach循环来获取里面的集合。 首先我们先定义两个集合//武林高手集合 cla...

2017-10-19 10:37:53

阅读数 618

评论数 0

观察者设计模式——猫捉老鼠

观察者设计模式通过猫捉老鼠这个例子来弄清楚委托和事件并且对他们的用途有更深的认识。 在这里,猫是被观察者,老鼠是观察者。当观察者发生动作时,观察者对应的就会有相应的动作,比如猫开始移动了,老鼠就相应地都逃跑了。又比如在游戏中,被观察者是一个开始按钮,当它被点击的时候,观察者(美术资源、音乐资...

2017-10-12 11:18:43

阅读数 760

评论数 0

匿名方法、Lambda表达式和事件

匿名方法在前面我们知道委托可以指向一个或多个方法,当有一个方法只需要用一次并且很简短,例如:static int Test1(int arg1,int arg2) { return arg1 + arg2; }//使用委托指向这个方法 sta...

2017-10-09 17:12:14

阅读数 154

评论数 0

委托的应用——通用冒泡排序

学习过数据结构和算法的,都知道冒泡排序是如何实现的,它是从最前面两个数开始比较,如果前面的数比后面的大,就交换位置,以此类推,使数据完成从小到大的排序。但是在实际应用中,不可能是只给你一些整型的数据来让你排序,可能是给你一个类,里面有很多属性,我们需要根据其中的一个属性的大小来排序,所以我们需要使...

2017-10-09 16:25:19

阅读数 181

评论数 1

委托

在前面我们说过委托的定义和作用,它可以指向有返回值和参数的方法。 在C#中,系统内置(预定义)了两个委托类型,分别是Action委托和Func委托,这两个委托类型可以满足编程中大部分需求,不需要我们自己去定义新的委托类型。Action委托:它可以指向一个没有返回值,没有参数的方法。但是它可以通过...

2017-10-04 11:24:14

阅读数 143

评论数 0

正则表达式

正则表达式是计算机科学的一个重要概念,它使用一种数学算法来解决计算机程序中的文本检索、匹配等问题,正则表达式语言是一种专门用于字符串处理的语言,在很多语言中都提供了对它的支持。 正则表达式的作用: 检索:通过正则表达式,从字符串中获取我们想要的部分 匹配:判断给定的字符串是否符合正则表达式的过滤...

2017-10-02 14:45:26

阅读数 64

评论数 0

string和StringBuilder

在之前我们简单的介绍了string字符串的一些操作方法,有一点要知道的是,当我们修改string字符串时,实质上我们是在堆内存里,重新开辟了一个内存空间,将修改完的字符串放进去,再引用到这块内存,旧的内存空间则被GC回收。如果我们需要频繁地修改字符串,那这种重复开辟内存的方法就会影响效率,所以我们...

2017-09-28 10:31:59

阅读数 102

评论数 0

使用泛型来创建我们自己的列表

在前面我们知道在C#中有一个List类,可以存储长度不限的数据。列表是使用了泛型来创建的,那我们可以通过泛型来创建自己的一个列表,这样我们能够对泛型和列表有个更深刻的了解。首先,我们知道列表其实就是一个数组,只不过构造的时候不需要指定长度,那么我们首先要定义一个泛型数组和其中元素个数的变量。cla...

2017-09-27 10:40:46

阅读数 83

评论数 0

泛型

泛型是什么 泛型是程序设计语言的一种特性,它通过参数化类型来实现在同一份代码上操作多种数据类型。利用参数化类型将类型抽象化,从而实现灵活的复用泛型类 当定义一个类的时候,这个类的某些字段的类型可以是不确定的,这个类就叫做泛型类,这些类型可以在类构造的时候确定。 例如:class ClassA...

2017-09-26 09:38:02

阅读数 69

评论数 0

泛型之列表的创建和使用

在前面,我们需要存储很多类型一样的数据的时候,我们一般都使用数组来存储并且管理,但是数组有个缺点就是数组的大小是固定的,那么当我们不确定数据的个数的时候,该怎么存储呢? 我们可以使用集合类来进行存储数据,列表List就是集合类的一种。我们可以使用列表很方便的添加、删除数据以及其他的操作。列表的创...

2017-09-25 22:18:14

阅读数 165

评论数 0

定义和实现接口

接口在继承中我们讲到了接口,那么如何去定义和实现一个接口呢?定义一个接口在语法上和定义一个抽象类完全相同,但是不允许提供接口中任何成员的实现方式。 语法规则定义接口(飞翔) public interface IFly{ public void Fly(); }实现接口 public cl...

2017-09-25 20:10:09

阅读数 1454

评论数 0

派生类的构造方法以及修饰符的作用

派生类的构造方法在学习如何定义类的时候,我们学会了定义类之后如何使用构造方法来初始化对象。在继承关系中至少有两个类,那么是使用父类还是子类的构造方法来初始化对象呢?在子类中调用父类的默认构造方法(无参)public class MyDerivedClass{ public MyDerive...

2017-09-25 19:47:06

阅读数 178

评论数 0

抽象类与密封方法

抽象类在上一篇文章里,我们知道基类里的函数能够被重写,那么要是在一个程序里,他的函数在每个子类里全部都要被重写,该基类的函数可不可以不去实现,只定义一个函数呢? 我们可以定义一个抽象函数,抽象函数只有函数定义没有函数体,可以说抽象函数本身也是虚拟的virtual(只有函数,没有函数体实现)当一个...

2017-09-25 17:27:37

阅读数 127

评论数 0

关于继承里的虚方法和隐藏方法

在继承里,我们知道子类拥有父类的方法,那么如果子类需要的方法和父类的有一些区别,想要修改一下要怎么做呢?C#里有两种重写的方法:虚方法和隐藏方法。虚方法 在基类中,将函数声明为virtual,这个函数就叫做虚方法,可以在任何派生类中重写该函数。该函数不能有private、static、abstr...

2017-09-24 13:00:43

阅读数 285

评论数 0

面向对象编程-继承

继承在前面我们学习了如何去定义类,用类当做模板来声明我们的数据。那么当我们的程序需要很多个类,但是这些类有很多相似的字段和方法,我们也要一个个重新去定义吗? 我们可以使用继承,将相同的方法和字段放在一个基类里,有不同的字段或方法就写在派生类,继承基类。实现继承 表示一个类型派生于一个基类,它拥...

2017-09-24 11:16:58

阅读数 82

评论数 0

匿名类型&&堆和栈

匿名类型在前面的代码中,我们创建变量(对象)的时候,都指定了变量的类型,但是我们也可以不去指定类型,这个就叫做匿名类型。我们可以使用var声明一个匿名类型,匿名类型初始化的时候,这个变量的类型就被确定下来了,并且之后不能够在被修改。static void Main(string[] args) ...

2017-09-23 15:56:09

阅读数 77

评论数 0

面向对象编程-定义类

为什么使用面向对象编程?程序员为了让程序更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会。面向对象编程也叫OOP编程。类类创建的变量叫做对象,实际上类是创建对象的模板,每个对象都包含数据,并提供了处...

2017-09-22 17:37:59

阅读数 127

评论数 0

关于VS中的错误处理和调试

关于错误和调试的基本概念 错误 语法错误:比如变量名错误等,导致编译器无法编译,编译器能够实时报错 //语法错误,变量名出错 int temp = 235; tem = 43; 语义错误(逻辑错误):逻辑在某些方面有瑕疵,会导致结果和预想中的不...

2017-09-22 11:33:06

阅读数 2355

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭