C#编程基础
1、.NET与C#
A、.NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。
B、C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。
2、.NET能做什么?
A、桌面应用程序 WinForm。
B、Internet应用程序 ASP.NET。
C、手机开发 WP7。
3、IDE
A、Visual Studio 用于开发WinForm、ASP.NET Web应用程序、XML、WEB Service、移动应用程序。
B、Visual Studio2002 对应.Net1.0
Visual Studio2003 对应.Net1.1
Visual Studio2005 对应.Net2.0
Visual Studio2008 对应.Net3.x
Visual Studio2010 对应.Net4.x
C、MSCN的全称是Microsoft Developer Network。这是微软公司面向软件开发者的一种信息服务。
4、Visual Studio介绍
A、解决方案中可以包含多个项目,项目中可以包含多个程序文件。
B、.cs文件的基本结构,命名空间包含类,类包含方法。
Using System; –>引用命名空间
Namespace Dragon –>定义一个Dragon的命名空间
{
Class Program –>定义一个Program的类
{
Static void Main(string[] args) –>定义一个方法Main
{
}
}
}
C、重置开发环境:工具->导入和导出。
D、Main方法是程序的入口。
E、.sln是解决方案文件;.csproj是项目文件;.cs是类文件。
F、显示行号:工具->选项->所有语言。
G、当解决方案下建多个项目时,需要注意启动项设置。
H、当解决方案下建多个项目时,编译和运行可以考滤使用卸载与加载功能。
I、C#中的注释:单行注释//;多行注释/**/;文档注释///。
J、折叠一段代码#region; #endregion。
5、变量
A、变量的声明: 类型 变量名;
B、变量的赋值: 变量名 = 值;
C、声明多变量: 类型 变量名,变量名1…N。
注: 变量须要先声明再赋值,然后使用。
6、变量命名规则
A、变量名必须以字母开头。
B、变量名只能由字母、数字和下划线组成,而不能包含空格、标点符号、运算符等其它符号。
C、变量名不能与C#中的关键字名称相同。
D、变量名不能与C#中的库函数名称相同。
E、大小写敏感。
7、C#数据类型
A、C#里面的数据类型分为两种:值类型和引用类型。这两者有很大的区别,其中值类型变量直接保存变量的值,引用类型的变量保存的是数据的引用地址。
值类型包括简单值类型和复合型类型。简单值类型可以再细分为整数类型、字符类型、实数类型和布尔类型;而复合类型则是简单类型的复合,包括结构(struct)类型和枚举(enum)类型。
整数类型
数据类型 |
说明 |
取值范围 |
对应System程序集结构 |
sbyte |
有符号8位整数 |
-128-127 |
SByte |
byte |
无符号8位整数 |
0-255 |
Byte |
short |
有符号16位整数 |
-32768-32767 |
Int16 |
ushort |
无符号16位整数 |
0-65535 |
UInt16 |
Int |
有符号32位整数 |
-2147489648-2147483647 |
Int32 |
uint |
无符号32位整数 |
0-42994967295 |
UInt32 |
long |
有符号64位整数 |
-263-263 |
Int64 |
ulong |
无符号64位整数 |
0-264 |
UInt64 |
字符类型
C#中采用Unicode字符集来表示字符类型。一个Unicode字符16位长。
实数类型
数据类型 |
说明 |
取值范围 |
float |
32位单精度实数 |
1.5*10-45-3.4*1038 |
double |
64位双精度实数 |
5.0*10-324-1.7*10308 |
demcimal |
128位十进制实数 |
1.0*10-28-7.9*1028 |
布尔(bool)类型
取值只能是ture或者false,bool类型对应于.NET类库中的System.Boolean结构。它在计算机中占4个字节,即32位存储空间。
结构类型
把一系列相关的信息组织成为一个单一实体的过程,这就是创建一个结构的过程。
struct person
{
string m_name; //姓名
int m_age; //年龄
string m_sex; //性别
}
枚举类型
主要用于表示一个逻辑相关联的项和组合。使用关键字enum来定义。
enum Weekday
{
Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
}
B、引用类型
引用类型包括类(class)、接口(interface)、委托(delegate)和数组(array)。
类(class)
类是一组具有相同数据结构和相同操作的对象集合。创建类的实例必须使用关键字new来进行声明。
注意: 类和结构之间的根本区别在于:结构是值类型,而类是引用类型。对于值类型,每个变量直接包含自身的所有数据,每创建一个变量,就在内存中开辟一块区域;而对于引用类型,每个变量只存储对目标存储数据的引用,每创建一个变量,就增加一个指向目标数据的指针。
接口(interface)
应用程序之间要相互调用,就必须事先达成一个协议,被调用的一方在协议中对自己所能提供的服务进行描述。在C#中,这个协议就是接口。接口定义中对方法的声明,既不包括访问限制修饰符,也不包括方法的执行代码。
注意: 如果某个类继承了一个接口,那么它就要实现该接口所定义的服务。也就是实现接口中的方法。
委托
委托用语封装某个方法的调用过程。
委托的使用过程分为3步:
1.定义 delegate void HelloDelegate();
2.实例化 HelloDelegate hd = new HelloDelegate(p1.Say); //p1.Say调用的方法
3.调用 hd();
数组
数组主要用于同一数据类型的数据进行批量处理。在C#中,数组需要初始化之后才能使用。
如:int[] array1 = new int[3]{2,3,5};
int[] array1 = {2,3,5};
注意: 对规则多维数组,调用Length属性所得的值为整个数组的长度;而调用其GetLength方法,参数为0时得到数组第1维的长度,为1时得到数组第2维的长度,以此类推。而对于不规则多维数组,调用Length属性和以0为参数调用其GetLength方法,得到的都是第一维的长度。
C、类型转换
数值转换
数值的转换有一个原则,即从低精度类型到高精度类型通常可以进行隐式转换;而从高精度类型则必须进行显式转换。
如:int i = 100;
long j = 1000;
j = i; //隐式转换,由低精度到高精度的转换
i = (int)j; //显式转换,有高精度到底精度的转换
具体转换过程中信息的丢失就看各数据类型的精度了。(可以参考上面数据类型)
枚举转换
枚举类型与其他任何类型之间不存在隐式转换。而和枚举类型相关的显式转换包括:
1.从所有整数类型(包括字符类型)和实数类型到枚举类型的显式转换;
2.从枚举类型到所有整数类型(包括字符类型)和实数类型的显式转换;
3.从枚举类型到枚举类型的显式转换。
装箱和拆箱转换
主要是值类型与引用类型之间相互转换。
如:object obj 1= 10;
int i = (int)obj; //拆箱
int j = 100;
object obj2 = j; //装箱
转换检查
如果出现转换失败,程序就会抛出一个System.InvalidCastException异常。
8、C#运算符
C#可以分为一下几类:算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、其他运算符。
1、算数运算符 + - * / % 加、减、乘、除、取余
2、赋值运算符 = ,+=, -= ,*=, /= , %=, &= ,|= , ^= ,>>=, <<=.
3、关系运算符 > ,<,>=,<=,==,!=.
4、逻辑运算符 !,&&,||.
5、位运算符 按位取反~,按位与&,按位或|,左移<<,右移>>,按位抑或^
6、条件运算符 ?和:组成,用于三元表达式。
7、其他运算符
字符串连接符+;
() 类型转换运算符 将一种数据类型强制转换成另外一种数据类型
is运算符 检查对象是否与给定类型兼容;
as 运算符用于在兼容的引用类型之间执行某些类型的转换,类似于强制转换操作.注意,as 运算符只执行引用转换和装箱转换. as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用强制转换表达式来执行;
sizeof运算符,获得值类型数据在内存中占用的字节数;
new运算符,用于创建对象和调用对象的构造函数;
true运算符 返回布尔值 true 表示真,否则返回 false;
false运算符 返回布尔值 true 表示假,否则返回 false;
typeof ,用于获得一个对象的类型;
checked 和unchecked,用于控制整数算术运算中当前环境的溢出情况.
优先级
基本(其他运算符)>一元>乘除>加减>移位>关系>等式>按位与>按位抑或>按位或>逻辑与>逻辑或>条件>赋值
9、C#转义字符
·一种特殊的字符常量;
·以反斜线"\"开头,后跟一个或几个字符。
·用可以看见的字符表示那不可以看见的字符, 如'\n'表示换行
常用的转义字符及其含义:
\’ 单引号
\” 双引号
\\ 反斜杠
\0 空
\a 警告(产生峰鸣)
\b 退格
\f 换页
\t tab键
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
c#里@的作用就应该是忽略转义字符的作用
在C#中,"c:\\temp"表示路径是c:\temp; 而@"c:\temp"就表示c:\temp;
10、C#注释方式
1、//单行注释
2、/* */多行注释
3、///
///文本注释
///
11、try catch捕获运行时错误
A、try
{
//可能出错的代码
}
Catch
{
//出错后的动作
}
B、Exception对象捕获运行时错误的具体信息。
12、if语句
A、if基本语法:
if (条件)
语句;
B、if-else
if (条件)
{语句1;}
Else
{语句2;}
C、if-else if
If(条件1)
{语句1;}
else if(条件2)
{语句2;}
else if(条件N)
{语句N;}
else
{语句3;}
13、switch case
switch (表达式)
{
case 值1:
语句块1
break;
case 值2:
语句块2
break;
...
default :
语句块N
break;
}
14、三元表达式
表达式1?表达式2:表达式3;
?号之前的表达式1为布尔条件表达式,如值为真(true)则执行表达式2,如值为假(false)则执行表达式3。
15、while
A、while
while(条件)
{
循环体;
}
B、do while
Do
{
循环体;
}
While(条件);
16、for
For(表达式1;表达式2;表达式3)
{
循环体;
}
17、break, continue
break是跳出当层循环。continue开始循环的一次新迭代。
return语句就是用于指定函数返回的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!
18、程序调试
A、设置断点
B、单步运行
C、观察变量
19、常量、枚举
A、常量的定义
const 类型 常量名 = 值;
B、枚举
enum 名称
{
值1,….值N
};
20、结构
struct 结构名
{
定义结构成员
}
21、数组
数据类型[] 数组名 = new 类据类型[数组长度];
数据类型[] 数组名 = {1,2,3}
22、方法(函数)
定义:函数就是将一块代码进行重用的一种机制。
语法:
[修饰符] [类型] 返回值类型 方法名([参数列表])
{
方法体;
}
访问修饰符:
public 可以被外部成员调用
internal 可以在当前项目调用
protected 只能在被类的成员和该类的子类调用
private 只能在被类的成员调用(默认级别)
类型:
override、virtual、static、abstract、sealed
重载函数、虚拟函数、静态函数、抽象函数、密封函数(不可派生)
virtual关键字表明这个成员可以在派生类中被重写。
override关键字表示要重写基类虚拟成员的意图。要重写虚方法或抽象方法,必须声明使用override关键字。不能重写非虚方法或静态方法。 重写的基方法必须是 virtual、abstract 或 override 的。重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称。
static静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。 使用static关键字的方法可以不用实例化而直接使用。
abstract 修饰符指示所修饰的内容缺少实现或未完全实现。 abstract 修饰符可用于类、方法、属性、索引器和事件。 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。抽象类的在在主要是为了继承,不能创建抽象类的实例。包含一个或多个抽象成员的类必定也是抽象的。
sealed密封类不能被继承。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed 修饰符必须始终与override一起使用。
参数列表:
ref修饰参数,说明是引用的传递,也就是说在函数中对参数的操作会改变原来的值;out修饰参数,是说这个参数可以不被初始化,但在函数中一定要有赋值的语句。
调用:
1、如果是静态方法(static),使用 类名.方法();
注意:
1、 方法定义在类中。
2、 若有返回值,方法体中必须包含return语句。
3、 若没有返回值,则使用void声明一个函数。
23、修饰符、访问级别
A、修饰符
修饰符 |
用途 |
访问修饰符 public private internal protected protected internal |
指定声明的类型和类型成员的可访问性。 访问不受限制。 访问仅限于包含类型。 访问仅限于当前程序集。 访问仅限于包含类或从包含类派生的类型。 访问仅限于当前程序集或从包含类派生的类型。 |
abstract |
指示某个类只能是其他类的基类。 |
const |
指定无法修改字段或局部变量的值。 |
event |
声明事件。 |
extern |
指示在外部实现方法。 |
new |
从基类成员隐藏继承的成员。 |
override |
提供从基类继承的虚拟成员的新实现。 |
partial |
在整个同一程序集中定义分部类和结构。 |
readonly |
声明一个字段,该字段只能赋值为该声明的一部分或者在同一个类的构造函数中。 |
sealed |
指定类不能被继承。 |
static |
声明属于类型本身而不是属于特定对象的成员。 |
unsafe |
声明不安全的上下文。 |
virtual |
在派生类中声明其实现可由重写成员更改的方法或访问器。 |
volatile |
指示字段可由操作系统、硬件或并发执行线程等在程序中进行修改。 |
B、访问级别
一个成员或类型只能有一个访问修饰符,使用 protectedinternal 组合时除外。
命名空间上不允许使用访问修饰符。命名空间没有访问限制。
根据发生成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。
不嵌套在其他类型中的顶级类型的可访问性只能是 internal 或 public。这些类型的默认可访问性是 internal。
嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。
属于 |
默认的成员可访问性 |
该成员允许的声明的可访问性 |
enum |
public |
无 |
class |
private |
public protected internal private protected internal |
interface |
public |
无 |
struct |
private |
public internal private |
24、static修饰符
A、变量:static修饰的变量,可以直接使用。
B、方法:不需用new方法,可以直接通过 类名.方法()调用。
static方法:可以调用static方法,不能调用非static方法。非static方法可以调用static方法。
C、静态类,不能被new的类就是静态类。
23、方法的重载
通过使用相同的方法名称,不同的参数类型,构成重载。
24、面向对象
A、面向对象(Object Oriented,OO)是软件开发方法。
B、面向对象的几个概念:类是对相同事务的抽象;对象是具体的某个东西。如按钮是类,某个按钮就是对象。对象可以叫做类的实例(instance)。字段field是某个对象的变量,方法method是类执行的一些动作。
C、类的继承,类之间有继承关系。继承的关系:父类(parent)、基类(base)、子类(child)。
D、面对象的特性:封装、继承、多态。
25、定义类
A、修饰符 class 类名{}
26、属性property
A、属性是方法的一种。
B、属性的访问器包含与获取(读取或计算)或设置(写)属性有关的可执行语句。访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。set访问器包含一个隐藏的参数value,该参数包含从客户代码传送过来的值.
C、充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。
-设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。
D、语法:
[访问修饰符] 数据类型 属性
{
get{ };
set{ };
}
27、对象的引用
A、int、datetime、bool、char等属于值类型ValueType。
B、对象的引用则是传递引用。
28、构造函数
A、当类或结构创建时,其构造函数调用。构造函数与选件类或结构相同,并且,它们通常用于初始化新对象的数据成员。
B、不带参数的构造函数称为“默认构造函数”。 无论何时,只要使用 new 运算符实例化对象,并且不为 new 提供任何参数,就会调用默认构造函数。
C、除非类是 static 的,否则 C# 编译器将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化。
29、继承
A、类可以从其他类中继承。这是通过以下方式实现的:在声明类时,在类名称后放置一个冒号,然后在冒号后指定要从中继承的类(即基类)。
B、新类(即派生类)将获取基类的所有非私有数据和行为以及新类为自己定义的所有其他数据或行为。因此,新类具有两个有效类型:新类的类型和它继承的类的类型。
C、object是所有类的基类。
C#编程基础的更多相关文章
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- [.net 面向对象编程基础] (1) 开篇
[.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
- T-Sql编程基础
T-sql编程 入门小游戏 T-sql编程基础,包括声明变量,if判断,while循环,以及使用一些基本函数. 记得在学校的时候,写过一个二人对打的文字输出游戏. 上代码 alter proc usp ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- 如何夯实(Java)编程基础,并深入学习和提高
如何夯实(Java)编程基础,并深入学习和提高? 240赞同反对,不会显示你的姓名 匿名用户 240 人赞同 多学习...网上自学的学习网站很多,见以下榜单~一.汇总榜单: 公开课_学习网站导航 收录 ...
- Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”
Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...
- LINQ to XML 编程基础
1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...
- [.net 面向对象编程基础] (2) 关于面向对象编程
[.net 面向对象编程基础] (2) 关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...
- [.net 面向对象编程基础] (3) 基础中的基础——数据类型
[.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...
随机推荐
- 理解syslinux,SYSLINUX和PXELINUX
在研究网络装机的过程中,菜菜地被Syslinux.SYSLINUX和PXELINUX这些定义折磨了一下 它们有什么区别和联系?为什么配置PXELINUX要安装的是Syslinux而不是Pxelinux ...
- JVM内存GC的骗局——JVM不抛出OOM但内存已经泄露
概述 在日常测试中,我们会去重点观察java的内存使用情况,比如:进程会抛出OOM异常,不再接收新的请求:响应时间在固定时间段内变长,超时或者不响应,CPU使用率时常像过山车一样等.有时候JVM还会发 ...
- mysql命令大全用户管理相关命令
1.登陆 mysql>mysql -uJDev -p 2.用户管理 mysql>use mysql; 3.查看有哪些登陆用户 mysql> select host,user, ...
- easyui---form表单_validatebox验证框
第一种方式:混合写法 $("#password").validatebox({ }) <td><input type="text" name= ...
- poj3613 Cow Relays【好题】【最短路】【快速幂】
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions:9207 Accepted: 3604 Descrip ...
- 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers
题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...
- JavaScript外部函数调用AngularJS的函数、$scope
x 场景: 需要在用FusionCharts画的柱状图中添加点击事件,But弹出框是Angularjs搞的,我想的是直接跳到弹出框的那个路由里,然后在弹出框的控制器中绑定数据即可: /* 点击事件 * ...
- 用U盘制作并安装WIN10 64位原版系统的详细教程(该方法应该适用于任何一版的原版操作系统)
https://www.cnblogs.com/Jerseyblog/p/6518273.html
- servlet @WebServlet注释的用法
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.ser ...
- webstorm 智能提示忽略大小写
setting-Editor-General-Code Completion里的 Case sensitive completion: 可以设置只第一个字母敏感.完全敏感或者不敏感. 选择none.. ...