问题:
C#的基本用法
变量及其用法
表达式及其用法
---------------------------------------
高效率学习 C# ----------------------->计算机程序做处理数据的操作----------->如何存储数据和处理数据的方法。
3.1 C#的基本语法
*、忽略空白字符【空格、回车符、tab字符】。
*、C#代码每个语句用分号“;”结束。
*、C#是块结构的语言
{
C#代码1;
C#代码2;
C#代码3;
}//注意花括号不需要附带分号。
*、C#注释有3种:
<1> 如://注释内容。
<2> 如:/*注释内容*/ 。
<3>如:///注释内存。
*、C#区分大小写。
************C#控制台应用程序的基本结构****************
#region
#endregion 用来定义扩展和收缩的代码区域的开头和结尾。
注意:以#开头的任意关键字实际上是一个预处理命令,严格来说不是C#关键字。
----------------------------------------------------------------------
3.2变量
变量的不同内涵,称为类型。(相当于装不同东西的盒子)
声明变量:
类型 变量名;
<type> <name>;
变量的类型无限多,因为可以自己定义类型。
3.2.1 简单类型
简单类型:组成应用程序中基本组成部件的类型。
*、大多数简单类型用来存储数值。
1、数值类型
(1)整数
类型 别名 允许的值
sby System.SByte -128~127整数
byte System.Byte 0~255整数
short System.Int16 -32768~32767整数
ushort System.Int16 0~65535整数
int System.Int32 -2147783648~2147483647整数
uint System.UInt32 0~4294967295整数
long System.Int64 -9223372036854775808~9223372036854775807整数
ulong System.UInt64 0~18446744073709551615整数
(2)浮点数
类型 别名 近似最小值 近似最大值
float System.Single 1.5x10[-45] 3.4x10[38]
double System.Double 5.0x10[-324] 1.7x10[308]
decimal System.Decimal 1.0x10[-28] 7.9x10[28]
2、非数值类型
类型 别名 允许的值
char System.Char 一个Unicode字符, 0~65535整数
bool System.Boolean 布尔值:true或false
string System.String 一组字符
转义字符:反斜杠 / 加上字符组合。如:/n
3.2.2 变量的命名
(1)、变量命名规则如下:
a、变量名的第一个字符必须是字母、下划线“_”、或@。
b、其后的字符可以使字母、下划线或数字。
c、不能用C#的关键字命名。
注意:C#区分大小写。
(2)、命名约定
流行命名法:Hungarian记号法,在所有的变量名前加上一个小写的前缀,表示类型。如变量Age是int,命名为:iAge。
*可以用2个字母的前缀表示变量的类型。
现在的命名:最后根据变量的作用来命名它们。
.NET Framework 2种命名约定,称为:PascallCase 和 camelCase 。名称中的大小写表示他们的用途。
[1]、PascallCase:它们由多个单词组成,每个单词除第1个字母大写外,其他的字母都是小写。
[2]、camelCase:第1个单词小写,第2个单词的第1个字母大写,其他的小写。
建议简单的变量使用camelCase命名,高级的命名规则使用PascallCase 命名。
--------------------------------
3.2.3 字面值
在程序中被当作字面值常量:字面值是因为仅能用它的值称呼它,常量是因为它的值不能修改。每个字面值都有相应的类型,例如:0是int型,3.14159是double型。字面值仅存在于内置类型,没有类类型的字面值。因此,也没有任何标准库类型的字面值。
int i = 0;
0就是字面值。0这个字面值的类型是int类型。
*、引入字面值的概念:int a=4; string str="ab"; 有些场合下要把4,"ab"等等一起拿来说, 用什么名称来代表这些个东西呢,本没有名字,只好给它个名字,叫做 "字面值"。
有内置类型存在字面值。类类型不存在字面值。
类型 类别 后缀 示例/允许的值
bool 布尔 无 true或false
int,uint,long,ulong 整数 无 100
uint,ulong 整数 u或U 100U
long,ulong 整数 l或L 100L
ulong 整数 ul,uL,Ul,UL,lu,lU,Lu,或LU 100UL
float 实数 f或F 1.5F
double 实数 无或d或D 1.5
decimal 实数 m或M 1.5M
char 字符 无 'a',或转义序列
string 字符串 无 "a....a",可以包含转义字符序列
字符串的字面值
转义序列 产生的字符 字符的Unicode值
/' 单引号 0x0027
/" 双引号 0x00022
// 反斜杠 0x0005C
/0 空 0x00000
/a 警告(产生蜂鸣) 0x00007
/b 退格 0x00008
/f 换页 0x0000C
/n 换行 0x0000A
/r 回车 0x0000D
/t 水平制表符 0x00009
/v 垂直制表符 0x0000B
例子:
/'s 和 /u0027 相等。
双引号字符的转义: @"
C://Inetpub//wwwroot//a.txt
和
@C:/Inetpub/wwwroot/a.txt
相等。
注意:字符串是引用类型,字符串可以指定null,意思:字符串变量不引用字符串。
--------------------------------
3.2.4 变量的声明和赋值
注意:
变量在使用之前,必须初始化。
a.变量声明方法1(同时声明多个类型相同的变量):int i,j;
b.变量声明方法2(声明变量的同时为它们赋值):
int i = 2; 或 int i = 4,j=5;
int i,j=5; 注意:i使用之前必须初始化。
-----------------------------
3.3 表达式
表达式:把变量和字面值与运算符组合起来就可以创建表达式。(变量和字面值在使用运算符时,它们都是操作数)
a.运算符分类:数学运算符、赋值运算符、逻辑运算符。
b.运算符按处理操作数分类:
一元运算符,处理一个操作数;
二元运算符,处理两个操作数;
三元运算符,处理三个操作数;
------------------------
3.3.1 数学运算符
运算符 类别 表达式 结果
+ 二元 c=a+b; c的值是a和b相加的和 或 c的值是存储在a和b中的字符串的连接值(用于字符串类型变量有意义)
- 二元 c=a-b; c的值是a和b相减的差
* 二元 c=a*b; c的值是a和b相乘积
/ 二元 c=a/b; c的值是a和b相除的商
% 二元 c=a%b; c的值是a和b相除的余数
+ 一元 c= +a; c的值是a的值,相当于正号
- 一元 c= -b; c的值是b乘以-1,相当于负号
++ 一元 c=++a c的值是a+1,a递增1
-- 一元 c=--b c的值是b-1,b递减1
++ 一元 c=a++ c的值是a, a递增a+1
-- 一元 c=b-- c的值是b, b递减1
注意:
a.布尔值不能进行算数运算
b.char相加出现隐式转换,实际是数字相加。
------------------------
3.3.2 赋值运算符
运算符 类别 表达式 结果
= 二元 c=a c被赋予a的值 (用于字符串类型变量有意义与二元+运算符一样)
+= 二元 c+=a c被赋予c加a的和
-= 二元 c-=a c被赋予c减a的差
*= 二元 c*=a c被赋予c乘a的积
/= 二元 c/=a c被赋予c除以a的商
%= 二元 c%=a c被赋予c除以a的余数
------------------------
3.3.3 运算符的优先级
优先级 运算符
高 ++(用作前缀),--(用作前缀),+(一元),-(一元),
*,/,%
到 +(二元),-(二元)
=,*=,/=,%=,+=,-=
低 ++(用作后缀),--(用作后缀)
注意:括号可用于忽略优先级的顺序。
------------------------
3.3.4 命名空间
命名空间:是.net中提供应用程序代码容器的方式,这样唯一的标识代码及其内容。也用作.NET Framework中给项分类的一种方式。
* 默认情况下,C#代码包含在全局命名空间中。
(a). 命名空间的定义
namespace One
{
//在One命名空间的代码
}
//全局命名空间的代码
(b).命名空间中名称的引用
namespace One
{
//在One命名空间的代码,这里面的代码可以直接引用 NameOne 名称
// name "NameOne" 定义 NameOne名称
}
//全局命名空间的代码,这里面的代码必须使用 One.NameOne 来引用这个 NameOne 名称。
(c). 命名空间的嵌套(可以使用关键字namespace定义嵌套的命名空间)
namespace One
{
//在One命名空间中代码,要引用名称NameTwo,必须引用为:Two.NameTwo
namespace Two
{
//在Two命名空间的代码,要引用名称NameTwo,直接引用该 NameTwo 名称
//name "NameTwo" 定义NameTwo名称
}
}
//全局命名空间的代码,要引用名称NameTwo,必须引用为:One.Two.NameTwo
(d). 名称的唯一性
名称是命名空间唯一定义的。
namespace One
{
// name "NameThree",One 中的名称 NameThree 定义
namespace Two
{
// name "NameThree",Two 中的名称 NameThree定义
}
}
//全局命名空间的代码,One命名空间定义了2个不同的名称NameThree,要引用不同的名称 NameThree ,引用分别为:One.NameThree 和 Two.NameThree
(e). using 访问名称。
using语句含义:我们需要这个命名空间中的名称,所以不要每次总是要求对他们分类。
using语句可以应用到包含他们的命名空间,以及该命名空间中包含的嵌套命名空间中。
namespace One
{
// One 命名空间代码访问命名空间Two中的名称 "NameThree" ,使用using Two,One语句,代码可以使用 Two 引用Two.NameTwo
using Two
namespace Two
{
// name "NameThree",Two 中的名称 NameThree定义
}
}
//全局命名空间的代码
注意:不同命名空间中的相同名称会产生冲突,可以为命名空间提供一个别名,作为using语句的一部分。
namespace One
{
// 为命名空间提供一个别名 TW
using TW = Two
//name "NameThree" 命名空间One 中的名称NameThree定义
namespace Two
{
// name "NameThree",命名空间Two 中的名称 NameThree定义
}
}
//全局命名空间的代码
命名空间One 把 One.NameThree 引用为:NameThree 。
命名空间Two 把 Two.NameThree 引用为:TW.NameThree 。
注意:
<1> using语句本身不能访问另一个命名空间中的名称。(One里面又有另一个空间Two,所以不能做<2>步)
<2> 全局命名空间的代码不能以这种引用 TW.NameThree ,引用 Two.NameThree该空间的名称。
要想使用using语句声明如下:
using TW = One.Two
namespace One
{
//name "NameThree" 命名空间One 中的名称NameThree定义
namespace Two
{
// name "NameThree",命名空间Two 中的名称 NameThree定义
}
}
//全局命名空间的代码
这样全局命名空间的代码就可以按这种引用 TW.NameThree ,来引用 Two.NameThree该空间的名称。