C#模块
Hui110110
希望与众多有识之士共同探讨问题,共同成长!
展开
-
C#基础
C#环境:C#是.NET框架的一部分,且用于编写.NET应用程序,所以有必要了解一下.NET 。 .NET FrameWork是一个创新的平台,可以用来编写一下应用程序:Windows应用程序,web应用程序,web服务 .NET框架有一个巨大的代码库组成,用于C#等客户端语言。 一个C程序主要包括以下部分:命名空间声明,一个类class,一个Main方法 C#数据类型:值类型,引用类型,指翻译 2016-09-12 20:18:53 · 321 阅读 · 0 评论 -
[我眼中的C#]String和StringBuilder
先介绍一个有趣的概念,string和String的区别,前者是后者的别名,所以两者在定义的时候几乎没什么区别。(可以吧string理解为C#中的关键字,而String是.NET里面预定义的类,调用后者需要导入名称空间System。)。 string定义的字符串是一个不可变的字符串,我们通过给字符串赋值本质上是将该引用指向另一块内存空间,而原来的空间被GC(垃圾回收器)回收掉,而StringBuil原创 2017-03-16 16:25:26 · 263 阅读 · 0 评论 -
[我眼中的C#]正则表达式
什么是正则表达式? 英文Regular Expression,是计算机科学的一个重要概念,她使用一种数学算法来解决计算机程序中的文本检索,匹配等问题,正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,c#也不例外,它可以帮我们解决下面的问题: 1,检索:通过正则表达式,从字符串中获取我们想要的部分 2,匹配:判断给定的字符串是否符合正则表达式的过滤逻原创 2017-03-16 16:39:56 · 297 阅读 · 0 评论 -
[我眼中的C#]多线程编程
首先了解一下相关概念。 进程:正在运行的计算机程序的实例。 线程: 有事被称作轻量级进程,是程序执行流的最小单元 开启一个线程通常有几种方式,接下来一一介绍。 通过委托开启 可以通过Action和Func委托分别开启两个不带和带有返回值的线程 先定义两个方法,Thread.CurrentThread.ManagedThreadId用来返回线程ID Action委托示例如下:原创 2017-03-17 09:34:11 · 394 阅读 · 0 评论 -
[我眼中的C#]网络编程
TCP协议通过Socket(套接字)建服务器和客户端 服务器端: static void Main(string[] args) { //创建Socket,这里用的是TCP协议,所以SocketType为Stream(流) Socket tcpServer = new Socket(AddressFamily.InterNe原创 2017-03-17 09:51:07 · 292 阅读 · 0 评论 -
[我眼中的C#]创建多人聊天室
服务器端: static List<Client> clients = new List<Client>(); /// <summary> /// 广播消息 /// </summary> /// <param name="message"></param> public static void BroadcastMess原创 2017-03-17 09:54:13 · 1436 阅读 · 0 评论 -
[我眼中的C#]文件读写操作
通过FileInfo和DirectoryInfo查看文件和文件夹信息 首先创建一个文本文件(内容为“Hello World!”),这个文件的目录位于工程路径下,但是FileInfo所访问的路径位于Debug文件夹下,所以,要把文本文件的“复制到输出路径”选为“如果较新则复制”。 之后进行文件操作:FileInfo fileInfo = new FileInfo("TextFile1.txt");原创 2017-03-17 10:45:44 · 316 阅读 · 0 评论 -
[我眼中的C#]XML和JSON
JSON JSON式存储和交换文本信息的语法,它是一种轻量级文本数据交换格式,JSON独立于语言,他具有自我描述性,所以相对于XML更容易理解。 学习JSON之前需要导入JSON 解析库,我们这里需要的是LitJSON.DLL,有两种方式导入 1,直接去JSON官网从C#模块下载, 2,通过VS项目引用里的的NuGET直接联机下载。 之后通过JSON创建两个json文档 {}代表一原创 2017-03-17 11:02:03 · 445 阅读 · 0 评论 -
[我眼中的C#]委托和Lambda表达式
委托是 C#用来传递方法的引用的语法,和类相同,委托调用之前也要经过定义和声明的过程private delegate string GetString(); static void Main(string[] args) { ////委托是一个类型,这个类型可以赋值一个方法的引用 ////ToString()是objec原创 2017-03-17 11:08:19 · 382 阅读 · 0 评论 -
[我眼中的C#]反射和特性
程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BLC中的类)这些也是数据。 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程序集中。 程序在运行时,可以查看其它程序集或其本身的元数据。一个运行的程序查看本身的元数据或者其他程序集的元数据的行为叫做反射。 特性(attribute)是一种允许我们向程序的程序集增加元数据的语言结构。它是用于保存程序结原创 2017-03-17 11:23:44 · 362 阅读 · 0 评论 -
C#碎片整理(一)
编程工具产生的代码和基类库(BCL)组成公共语言运行库(CLR) 代码经过编译和运行过程称为机器可识别的机器语言。 编译过程:.NET兼容的代码文件经过贬义词产生程序集(DLL文件或者EXE)包括CIL(公共中间语言)和类型信息 运行过程:程序集通过CLR里的JIT及时编译器解析成本地代码 托管代码:托管代码是编译所产生的中间语言,运行在CLR上,接受内存管理,垃圾回收等服务 非托管代码:原创 2017-05-15 20:51:24 · 764 阅读 · 0 评论 -
利用C#创建一个我们自己的列表
通过C#创建一个列表,实现索引器,构造器,添加,删除,排序等功能。 class MyList<T> where T:IComparable { private T[] array; private int count; public MyList(int size) { if (size >= 0)原创 2017-05-16 20:31:21 · 828 阅读 · 0 评论 -
C#碎片整理(二)
构造函数就是用于初始化数据块的函数 属性不会默认设置get或set方法,如果没有设置get或set,则不可读或写 var声明的匿名类型,初始化之后类型确定,并且以后不可修改。 继承分为实现继承和接口继承 隐藏方法通常用关键字加以区分 抽象类是一个不完整的模板,不能实例化,可以用抽象类去声明对象,但不能构造对象。继承抽象类时必须实现抽象方法。 子类必须至少继承一个父类的构造函数,如果不写,原创 2017-05-16 20:29:24 · 472 阅读 · 1 评论 -
C#中的几个比较
非泛型集合(ArrayList):一个集合可以包含所有object类型的数据,但是会进行繁琐的装箱和拆箱操作,性能有所损失 泛型集合(List):一个列表只包含一种类型的数据,但是不存在装箱和拆箱,建议使用。 堆和栈 GC回收一般发生在内存不够用时,否则不会发生除非手动调用,GC将停止所有运行中的线程,完全停止。 引用类型永远存储在堆上,值类型取决于声明的位置 值类型和引用类型在内容更改时原创 2017-05-16 21:34:20 · 332 阅读 · 0 评论 -
正则表达式
概念:正则表达式使用一种数学算法来解决计算机程序中的文本检索,匹配等问题。正则表达式是一种专门用于字符串处理的语言,主要用于检索(通过正则表达式获取我们想要的部分)和匹配(判断给定字符串是否符合我们的过滤逻辑) 正则表达式常用元字符: ^:匹配字符串的开始 $:匹配字符串的结束 *:匹配前面字符任意次 +:匹配字符一次或多次 ?:匹配0次或一次 {n,m}:匹配n到m次 {n,}:匹原创 2017-05-17 19:58:45 · 249 阅读 · 1 评论 -
String和StringBuilder
String创建的字符串内容是不可改变的,对字符串进行的操作实际上是新开辟了内存,效率很低。 StringBuilder创阿金的字符串内容可以改变,对字符串进行的操作都是在原始字符串上进行更改,因此当我们需要对一个字符串进行频繁操作时,使用StringBuilder效率更高。 String常用操作: string s = " www.baidu.com";//字符串内容是不可变的原创 2017-05-17 19:50:10 · 317 阅读 · 0 评论 -
[我眼中的C#]集合和泛型
当我们有很多类型一样的数据的时候,前面我们一般使用数组来进行管理,但是这样有个缺点就是数组的大小是固定的。如果我们很多类型一样的数据,比如游戏得分,我们可以集合类来进行管理,比如列表List,我们可以使用列表List很方便的添加数据,删除数据还有其他对数据的操作。 由于列表操作需要用到泛型,简单介绍一下泛型的概念。通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,原创 2017-03-16 15:58:39 · 644 阅读 · 0 评论 -
[我眼中的C#]类的介绍
类的使用 类在使用之前经过定义和声明两个阶段。类包括数据成员(如字段,常量,事件等)和函数成员(属性,方法,索引器,属性终接器等) 虚方法 父类通过Virtual关键字,可以在子类中通过override关键字重写父类中的方法 隐藏方法 不同于虚方法,子类中的同名方法只是隐藏了父类中的方法,因此通过父类调用该方法时仍然执行父类中的方法 抽象类 抽象函数只有函数的签原创 2017-03-16 15:42:52 · 696 阅读 · 0 评论 -
C#实现窗口抖动
C# 先从几个基础的小游戏开始,毕竟实践出真知,本节主要讲窗口抖动,代码如下using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using S原创 2016-09-04 11:37:12 · 1905 阅读 · 0 评论 -
C#实现气泡
本节主要讲解气泡,代码如下using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;us原创 2016-09-04 11:42:14 · 1065 阅读 · 0 评论 -
WPF打字游戏
本文的通过C#利用WPF编辑打字游戏,实现按下指定按键飞机打出一颗子弹并且产生厌恶,击中字母后子弹以及字幕消失,代码如下 编辑器界面对整体的背景以及大小的设定,同时导入按钮空间实现开始和结束<Window x:Class="打字游戏2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentati原创 2016-09-04 12:09:04 · 661 阅读 · 0 评论 -
别踩白块的两种模式
本节主要讲解别踩白块,游戏采用的方法较为简单,主要学习C#中如何创建动态数组,来存放相应的空间,游戏分为两个模式,模式一通过点击来实现移动,模式二(也就是常见的模式)方块移动,手动点击,并且方块速度会加快,代码如下: 编辑器界面<Window x:Class="别猜百块1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2原创 2016-09-04 12:20:19 · 1487 阅读 · 0 评论 -
C#中的贪吃蛇
本文主要讲解贪吃蛇,实现两条蛇,代码如下 编辑器界面<Window x:Class="贪吃蛇1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"原创 2016-09-04 12:28:28 · 3799 阅读 · 0 评论 -
C#中的俄罗斯方块
本节主要讲解俄罗斯方块,代码如下 编辑器界面<Window x:Class="CubeCube.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Win原创 2016-09-04 12:35:34 · 1042 阅读 · 2 评论 -
C#通过三层链接数据库编写QQ(一)
数据库的三层(表示层也成为会话层;逻辑业务层;数据访问层)在数据库的学习中起着至关重要的作用,今天通过编写一个小程序(QQ)来了解数据库三层的实现过程。 开发工具是VS2013和SQLServer2014 首先建立数据库保存个人信息: IF DB_ID(‘MYQQ’) IS NOT NULL DROP DATABASE MYQQ CREATE DATABASE MYQQ ON (原创 2017-02-27 21:35:30 · 973 阅读 · 0 评论 -
C#通过三层连接数据库编写QQ(二)(含资源)
上一节主要讲了数据库的数据访问层,逻辑业务层以及贯穿始终的模型层从而访问数据源。这届通过表示层来讲述C#中WPF界面的设计以及表示层如何与逻辑业务层互相传递数据。 界面主要有如下七个:登录界面;个人主页;修改个人信息界面;头像选择界面;聊天窗口界面;陌生人查询界面;注册个人信息界面登录界面 实现功能:账号密码的验证(提示错误或跳转到个人主页),登录,退出登录,注册账号(跳转到注册界面),以及顶部原创 2017-02-28 17:44:23 · 874 阅读 · 0 评论 -
[我眼中的C#]创建一个项目
如图我们创建了一个C#控制台应用程序,上面的名称表示我们的项目的名称,下面的是我们解决方案的名称(默认和项目名称相同), 一个解决方案里面有多个项目 点击确定就生成了一个项目,项目里面会自带一个Program类,它包含了程序的入口方法Main()方法 接下来介绍一些常用的概念: 变量:计算机中能存储计算结果或标示值的抽象概念 变量的命名规则:首字符(允许a-z,A-Z,,@;不允许原创 2017-03-16 11:09:41 · 747 阅读 · 0 评论 -
[我眼中的C#]简单的变量类型
C#中的变量类型分为值类型和引用类型 值类型包括整型(sbyte,byte,short,ushort,int,uint,long,ulong)和浮点型(float,double,decmial)和字符型(char)和布尔型(bool) 引用类型包括字符串(string)和Object(该类型可以表示任何类型,其他类型继承自他) 整型: 浮点型: bool类型: 字符类型:原创 2017-03-16 11:21:01 · 388 阅读 · 0 评论 -
[我眼中的C#]值类型和引用类型的转换
进行转换之前先了解一下格式化字符串的概念,格式化字符串就是以一定格式输出的字符串 有两种方式可以用来表示字符串中的值 第一种通过标记“{index}”,第二种通过连接符“+” 接下来介绍装箱和拆箱的概念 装箱:将值类型转化为引用类型 拆箱:将引用类型转化为值类型 为什么需要装箱和拆箱呢?举个例子有时候我们的方法需要引用类型的参数,name这时我们就需要把值类型转换为引用类型了。原创 2017-03-16 11:48:07 · 2105 阅读 · 0 评论 -
[我眼中的C#]显式转换和隐式转换
上节介绍了15中基础的变量类型,那么这些变量之间如何转换呢?下面我们来介绍一下(本节介绍的是值类型(存储在栈上),而引用类型(存储在堆上)和引用类型的转换需要通过CLR预定义的类进行)。 转换分为显式转换和隐式转换,显式转换就是需要我们通过代码去控制的使其变量类型发生改变的转换,而隐式转换不需要我们去操作,编译器会自动执行 进行转换的原则就是内存的空间能够放的下,上节我们了解了不同变量都有它的取原创 2017-03-16 11:35:03 · 917 阅读 · 0 评论 -
[我眼中的C#]复杂的数据类型
枚举 枚举本身是值类型,使用enum关键字进行声明,通过枚举可以使代码更清晰,更容易维护,同时也更易输入。枚举默认是int类型,当我们不需要这么大的内存空间的时候我们可以将他修改为byte类型以节省空间 结构体 结构体是值类型,他存储在栈上,通过Struct关键字进行声明,默认构造函数没有参数,我们可以自己定义构造函数 数组 数组是引用类型,存储在堆空间上,构造数组的几种方式,需要原创 2017-03-16 14:57:10 · 1144 阅读 · 0 评论 -
[我眼中的C#]流程控制语句
流程控制主要分为分支和循环,下面介绍几种流程控制语句 if…else while和do…while while和do…while的区别是后者是先执行后判断,前者是先破判断后执行 goto goto语句可以跳转到指定标记的地方重新执行,但是由于这种跳转很容易引起代码的混乱,所以现在基本被弃用 switch…case case后面要跟break。否则当执行完一条case语句之后原创 2017-03-16 15:09:32 · 292 阅读 · 0 评论 -
[我眼中的C#]C#与.NET的区别与联系
C#与.NETFramewoek简介: C#是微软公司发布的一种面向对象的,运行于.NETFrameWork之上的 高级程序设计语言。他与Java有许多相似的地方(如单一继承,接口,与Java几乎同样的语法和编译成中间语言在运行的过程),但是他和Java有明显不同,他和COM(组件对象模型)直接集成的。 .NET Framework是用于Windows的新托管代码编程模型。它强大功能与新技术结合原创 2017-03-16 10:47:26 · 6044 阅读 · 2 评论 -
const,static和readonly区别
首先说一下static。static实际和两者区别很大,甚至可以不用放在一起进行比较,它表示静态,用于在声明类时实例化方法或者字段,不能通过实例化的类调用静态方法或字段,静态方法只能调用静态类的成员 const:静态常量(也叫编译时常量),readonly:动态常量(也叫运行时常量) const只能在声明时初始化,reandonly可以在声明时或构造函数中初始化, const都是静态的不能用s原创 2017-05-29 11:29:42 · 500 阅读 · 0 评论