1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组
一、程序
- 现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述。
- 在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合
- 程序=数据结构(指程序中的特定数据类型和数据组织形式)+算法(算法是指为达到某个目的所要执行的操作步骤)
二、标示符
- 标识符用来表示程序中的一个特定元素,如类名、方法名、变量名、项目名等等
- 标识符可以是字母、数字、下划线及“@”,但是必须以字母、下划线及@开头,不能以数字开头
- 标识符严格区分大小写
- 可以使用中文做为标识符,但不建议使用
- 不能使用关键字做标识符
- 对于类名和方法名的标识符,一般将每个单词的首字母大写,如StudentInfo;字段及变量名首单词的首字母小写,其他单词首字母大写
三、常量
常量使用const关键字来定义,常量在声明时必须赋值,且以后不能再对其赋值 eg:const int a = 10;
四、数据类型
C#中的数据可以分为两大类:值类型(Value Type)和引用类型(Reference Type)。
值类型包括: 结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型
引用类型包括: 数组,接口,委托,类(用户自定义类、String类、Object类)
值类型的对象,继承自System.ValueType类(此类的对象却是引用类型的),内容直接储存在栈上(以及MSDN中提到的“或在结构中以内联方式分配的”——“or allocated inline in a structure”);引用类型的对象,其内容存储于堆上,栈上的相应变量名下只存储该处的堆地址,长度为4字节/32位(32位操作系统)或者8字节/64位(64位操作系统)。
值类型的对象不能为null。不能从已有的值类型派生新的数据类型。
栈的特点:存放数据类型(值类型),其优点:比在堆上分配空间更快;用完之后立即自动释放;赋值方便(使用等号)
堆的特点:存放引用类型。
值类型的数据类型全部继承自System.ValueType类,它们又分为以下几类:
C#系统自定义了13种数值类型的数据类型:
整型 9种:byte, short, int(系统默认), long sbite, ushort, uint, ulong,char ----类型装换Convert 类
名称 |
值范围 |
系统名称 |
属于CLS |
占用内存长度 |
---|---|---|---|---|
byte |
0至28-1(128) |
System.Byte |
Yes |
1字节/8位 |
sbyte |
-27至27-1 |
System.SByte |
No |
1字节/8位 |
ushort |
0至216-1(65535) |
System.UInt16 |
No |
2字节/16位 |
short |
-215至215-1 |
System.Int16 |
Yes |
2字节/16位 |
char |
\0000至\ffff |
System.Char |
Yes |
2字节/16位 |
uint |
0至232-1(约4.29×109) |
System.UInt32 |
No |
4字节/32位 |
int |
-231至231-1 |
System.Int32 |
Yes |
4字节/32位 |
ulong |
0至264-1(约1.84×1019) |
System.UInt64 |
No |
8字节/64位 |
long |
-263至263-1 |
System.Int64 |
Yes |
8字节/64位 |
浮点型3种:float, double(系统默认), decimal
名称 |
值范围 |
系统名称 |
属于CLS |
精度 |
占用内存长度 |
实例 |
---|---|---|---|---|---|---|
float(单精度) |
±1.5×10-45 至±3.4×1038 |
System.Single |
Yes |
7位 |
4字节/32位 |
float f = 3.14f |
double(双精度) |
±5.0×10-324至±1.7×10308 |
System.Double |
Yes |
15至16位 |
8字节/64位 |
double d = 2.14 |
decimal(高精度) |
±1.0×10-28至±7.9×1028 |
System.Decimal |
Yes |
28至29位 |
16字节/128位 |
decimal d = 2.13M |
布尔型(逻辑)1种:bool
可能的取值为true和false,占用内存长度1字节/8位。C#中不再有类似于“零等于flase,非零int值等于true”的变换。bool型的系统名称为System.Boolean,属于CLS.
其他2种:
enum 枚举
枚举的数据类型的声明:[属性(attributes)] [访问标识(modifiers)] enum 名称(identifier) [:基类型(base-type)] {枚举列表(enumerator-list)} [;]
枚举类型的本意有两点:一是将难以记忆的整型数常量(除char外的8种整型数都可以)标记为更好理解的变量名。二是引入强类型,在需要采用整形数常量表示的变量之间建立屏障。虽然每个字符串代表了一个整形数常量,但是具体使用枚举类数据类型的整型数常量时仍需要强制类型转换。这个整数值在C#默认是int型的。
枚举列表中各个变量的赋值默认是从0开始,递加1的。
例如:enum days:int {Sat, Sun, Mon}; 取值(int)days.Sun为1 或 enum days:int {Sat=1, Sun, Mon}; 取值(int)days.Sun为2
struct 结构体
用户自定义的值类型数据类型,和类相似也有不同(有篇博客具体介绍过);本身没有继承这一特点,因此与继承相关的一切(例如抽象方法)结构体均不具备,除了两点:所有的结构体继承自System.Object类、结构体可以继承(实现)接口。
类 | 结构体 | |
---|---|---|
类型 | 引用类型 | 值类型 |
实例化 | 必须通过new实例化 | 可以不new,直接声明,但声明后必须赋值 |
构造方法(函数) | 方法不受限制(有、无参数均可,默认是无参) | 方法必须带有参 |
继承 | 自身继承System.Object,可继承(包含接口),也可被继承 | 除自身继承System.ValueType外,不可继承(除接口,通常叫做实现接口),也不可被继承 |
成员 | 字段声明时可赋值(初始化) | 字段声明时不可赋值,方法一般公有 |
作参数传递给方法 | 传递的是引用(值一但修改所有指向改类值都已改变) | 传递的是实际值(值修改不会影响其它指向值,除非被ref修饰;ref修饰后传递引用) |
性能介绍:结构是值类型,所以会影响性能,但根据使用结构的方式,这种影响可能是正面的,也可能是负面的。正面的影响是为结构分配内存时,速度非常快,因为它们将内联或者保存在堆栈中。在结构超出了作用域被删除时,速度也很快。另一方面,只要把结构作为参数来传递或者把一个结构赋给另一个结构(例如A=B,其中A和B是结构),结构的所有内容就被复制,而对于类,则只复制引用。这样,就会有性能损失,根据结构的大小,性能损失也不同。注意,结构主要用于小的数据结构。但当把结构作为参数传递给方法时,就应把它作为ref参数传递,以避免性能损失——此时只传递了结构在内存中的地址,这样传递速度就与在类中的传递速度一样快了。另一方面,如果这样做,就必须注意被调用的方法可以改变结构的值。
五、操作符
分类:
赋值操作符: | = |
---|---|
复合赋值运算符: | +=,-=,*=,/=,%= |
算数运算符: | +,-,*,/,%(ß二元运算符),++,--(ß一元运算符) |
条件运算符: | >,<,>=,<=,!=,== |
逻辑运算符: | &&(遇假为假),||(同真为真),! |
位运算符: | &,|,^,~,<<,>> |
备注: |
几乎所有的操作符都只能操作基本数据类型,但是”=”,”==”和”!=”, 这些操作符能操作所有的对象。除此以外String类支持”+”和”+=”。 |
优先级:
postfix operators |
[] . (params) expr++ expr-- |
---|---|
unary operators | ++expr --expr +expr -expr ~ ! |
creation or cast |
new (type)expr |
multiplicative | * / % |
additive | + - |
shift |
<< >> >>> |
relational |
< > <= >= instanceof |
equality | == != |
bitwise AND | & |
bitwise exclusive OR |
^ |
bitwise inclusive OR |
| |
logical AND | && |
logical OR | || |
conditional |
? |
assignment | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
备注 | 上面的操作数优先级从上到下依次降低,同一个单元格内的优先级相同 |
六、循环 注:[]表示可有可无
while (先判断后执行,)
用法:while(循环条件){循环体}
其它用法:while(变量名){ case 变量值1:[执行语句] break;······default:[执行语句] break;}
do-while (先执行一次再判断)
用法:do{循环体}while(循环条件);
for (和while类似,先判断)
用法:for([初始化循环变量];[循环条件];[修改循环变量值]){循环体}
foreach (遍历)
用法:foreach(类型 变量名 in 类型数据列表){}
扩展:continue(跳出本次循环进行下次循环)、break(跳出整个循环)、return(跳出整个方法,可有可无返回值)
七、数组
一维数组:类型[] 变量名 = new 类型[长度];
多维数组(矩形数组):类型[,] 变量名 = new 类型[外长度,内长度];--注:[]里的,等于几维减1
交错数组(数组的数组):类型[][] 变量名 = 类型[长度][];
1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组的更多相关文章
- C# 篇基础知识2——运算符、类型转换、流程控制、枚举、结构体和数组、函数
1.运算符.类型转换 计算某年y某月m某日d是周几的基姆拉尔森公式公式:int week = (d + 2*m + 3*(m + 1)/5 + y + y/4 - y/100 + y/400 + 1) ...
- C++之 自定义数据类型 枚举、结构体、共用体
1.枚举 枚举类型的声明形式为: enum 枚举类型名 { 变量值列表 }; 变量值列表里都是整型变量,另外不要忘记最后面的分号! 比如,enum weekday { sun, ...
- Go语言基础之8--面向对象编程1之结构体(struct)
一.结构体详解 1.1 声明和定义 1.Go中面向对象是通过struct来实现的, struct是用户自定义的类型 2.Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数 ...
- Java:标示符 基本数据类型
标示符: 在程序中自定义的一些名称,例如:变量.类名.方法名…… 组成有数字0~9.大小写英文字母.“$”和下划线“_”组成,且不能由数字开头,以及不能使用java已使用和保留的关键字. Java中的 ...
- 站在OC的基础上快速理解Swift的类与结构体
阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡 ...
- Swift基础语法(五)枚举、结构体与类的区别
swift中的结构体值可以是整型.浮点型.字符串.字符.元祖,如果不赋值默认为整型且从0开始计数,如果为整型枚举且要求不是从0开始只需指定枚举的第一个值以后的值自动依次加1 引用方式也与oc有所出入 ...
- C#基础加强(3)之值、引用类型及结构体
值.引用类型 介绍 引用类型派生自 System.Object ,而值类型均隐式派生自 System.ValueType . 其实 System.ValueType 也是继承自 System.Obje ...
- C语言的关键字,标示符以及数据类型
1. 关键字 1> 关键字就是C语言提供的有特殊含义的符号,也叫做“保留字” 2> C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义 auto doub ...
- 学会使用Constant常量或者Enum枚举
好多时候我们在数据库表中存放的类型是一个代号CHAR(1) 0,1,2,3等分别代表些什么. 那么你是怎么知道0,1,2,3代表什么的呢? 有的是建表,连接查询,但很少人用. 有的是在jsp页面c:i ...
随机推荐
- 应聘.net开发工程师常见的面试题(一)(转载)
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...
- SOAP 及其安全控制--转载
原文地址:http://my.oschina.net/huangyong/blog/287791 目录[-] 1. 基于用户令牌的身份认证 2. 基于数字签名的身份认证 3. SOAP 消息的加密与解 ...
- 优化sql,返回行数少情况下,NL比hash快好多
sql如下 select t.id, t.value, tt.sort as sortno from ENGINEERING_TYPE t left join ENGINEERING_TYPE tt ...
- 关于C++需要加强学习的几点内容
1.C++ effective指导原则 2.C++标准库 3.数据结构算法 4.C++设计模式 5.shell脚本 6.python
- 通过代码设置button中文字的对齐方式
// button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效 button.contentHorizontalAlignment = U ...
- 关于Eclipse Modeling Framework 实现模型驱动开发,第一部分
======================================EMF第二篇文章========================= 用 Eclipse Modeling Framework ...
- Entity Framework 学习整理(分播客整理)
MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...
- Apache优化:修改最大并发连接数
http://www.365mini.com/page/apache-concurrency-configuration.htm Apache是一个跨平台的web服务器,由于其简单高效.稳定安全的特性 ...
- Java内存溢出的详细解决方案
本文介绍了Java内存溢出的详细解决方案.本文总结内存溢出主要有两种情况,而JVM经常调用垃圾回收器解决内存堆不足的问题,但是有时仍会有内存不足的错误.作者分析了JVM内存区域组成及JVM设置虚拟内存 ...
- ASP.NET 常识
1..NET是什么? .Net全称.NET Framework是一个开发和运行环境, 该战略是微软的一项全新创意, 它将使得"互联网行业进入一 ...