二、变量的处理和表达式
变量和常量
本小节主要讲些变量的一些规则和开发中的注意事项。
变量命名
1.基本的规则:
- 变量的命名必须以字母、“_”或者“@”开头,以“@”开头是没有意义的,等同于不存在。
- 后面可以跟随字母、数字和“_”。
- 在C#中同时支持以中文作为变量名,但是一般开发不建议如此是使用。
- 需要注意以下事项:
1.起的变量名不能与系统中的关键字重复。
2.在C#中,大小写敏感。
3.在同一代码块中,变量不能重复定义。如果在上级代码块中包含了这个变量,那么下级代码块就不能定义相同的。如果两个代码块是互不干扰的两个代码块,则可以定义相同的变量。
4.定义变量的时候,一般建议变量是需要有意义的,一下编译可以通过的代码所有的变量定义都是在规则上允许,但是不建议。
//编译通过
int @sfsdf = 123;
int @sfsdf123132 = 123;
int 中国 = 123;
int _sss = 123;
//编译不通过
int @12sfsdf = 123;
2.pascal命名法(帕斯卡命名法):
帕斯卡命名法又叫大驼峰命名法,是把多个单词组成的变量命名时,把所有单词的首字母都写成大写。以下是例子:
int StudentName=0;
3.Camel命名法(驼峰命名法):
驼峰命名法又叫做小驼峰命名法,是指把多个单词组成变量名时,把第一个单词的首字母大写,后续的都小写。下面是例子:
int studentName=0;
值类型
值类型一般是放在栈中,派生自System.Object》ValueType
- 数值类型:
- 整 型:sbyte(System.SByte的别名),short(System.Int16),int(System.Int32),long (System.Int64),byte(System.Byte),ushort(System.UInt16),uint (System.UInt32),ulong(System.UInt64),char(System.Char);
- 浮点型:float(System.Single),double(System.Double);
- 用于财务计算的高精度decimal型:decimal(System.Decimal)。
- bool型:bool(System.Boolean的别名);
- 用户定义的结构体(派生于System.ValueType)。
- 枚举:enum(派生于System.Enum);
- 可空类型(派生于System.Nullable泛型结构体,T?实际上是System.Nullable的别名)。
1.13个基础数据类型
基础数据类型是运行时的类型
13个基础类型包括了
//整型
sbyte
byte
short
ushort
int
uint
long
ulong
//浮点型
float
double
decimal //decimal类型
char //字符型
bool //bool类型
2.枚举类型
继承:Object》ValueType》Enum
枚举类型是一中特殊的结构类型
定义一个枚举类型
/// <summary>
/// 查找方式
/// </summary>
public enum Sort
{
/// <summary>
/// 倒数第几个
/// </summary>
desc = 0,
/// <summary>
/// 正数第几个
/// </summary>
asc=1,
}
3.结构类型
基本类型在C#中的表现形式也是结构类型
所有的结构都默认继承了ValueType,对的这是一个类,也就是说所有的结构都是有继承的,继承了ValueType,也是因为这样,所以结构不再能继承类,只能继承接口,因为C#是单继承的。
引用类型
C#有以下一些引用类型:
- 数组(派生于System.Array)
- 用户用定义的以下类型:
- 类:class(派生于System.Object);
- 接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。Anders在《C# Programming Language》中说,接口只是表示一种约定[contract]);
- 委托:delegate(派生于System.Delegate)。
- object(System.Object的别名);
- 字符串:string(System.String的别名)。
字面值
一般是指给变量赋的值,一般情况下的话,有些时候需要赋值的时候加上特殊的符号。
bool isOk=true;
int intNum=0;
uint uintNum=0(u);//不能为负数
long lNum=0;
ulong ulNum=0(u/ul/lu);
float f=0f;
double d=0d;
decimal d=0m;
char c='';
string s="";
名称空间
在C#中名称空间一般用于逻辑上的代码隔离,在同一个命名空间之下你不能创建同一个名称的类。
类型转换
在C#中,从一个变量类型转换成另一个变量类型就叫做类型转换,一般有隐式转换、显示转换。
1.隐式转换
一般是由系统完成的,不需要自己特别的声明。
就数值类型而言,一般情况下,从值范围小的数据类型,给值范围类型大的数据类型赋值,这个时候可以使用隐式转换,不用人工处理。
int i=100;
double i1=i;//这里的类型转换就是隐式转换
2.显示转换
这个是需要人工干预的类型转换
从值范围小的数据类型给值范围大的数据类型赋值,需要显示转换。强制类型转换需要注意数据丢失的情况。
double d=100d;
float f=(float)d;//这里是显示类型转换。
double a=100.90;
int b=(double)a;//i这里会出现丢失后面的小数点后的数据的情况
Console.WriteLine(b);//这里输出的是100;
表达式和语句
表达式由操作数 (operand) 和运算符 (operator) 构成。表达式的运算符指示对操作数适用什么样的运算。运算符的示例包括+、-、*、/ 和 new。操作数的示例包括文本、字段、局部变量和表达式。
当表达式包含多个运算符时,运算符的优先级 (precedence) 控制各运算符的计算顺序。例如,表达式 x + y * z 按 x + (y * z) 计算,因为 * 运算符的优先级高于 + 运算符。
大多数运算符都可以重载 (overload)。运算符重载允许指定用户定义的运算符实现来执行运算,这些运算的操作数中至少有一个,甚至所有操作数都属于用户定义的类类型或结构类型。
运算符
1.逻辑运算符
在C#中有逻辑与(&)、逻辑或(|)、逻辑非(!)
1.逻辑与用来判断两个bool类型的数据是否两个都为true
Console.WriteLine(true&true);//返回true
Console.WriteLine(false&true);//返回true
2.逻辑或是用来判断两个bool类型的数据是否有一个为true
Console.WriteLine(true|false);//返回true
Console.WriteLine(false|false);//返回false
3.逻辑非取一个bool类型的反值
Console.WriteLine(!true);//返回false
2.数学运算符
一般有一元运算符、二元运算符、三元运算符等。
一般数学运算符与普通数学上的运算符差不多,例如加减乘除等二元运算符,与数学上一致,只是需要注意除需要特别注意下,他会根据具体的操作符的数据类型来有不同的值。
3.赋值运算符
一般常用的赋值运算符就是: =。除此之外还包括了
*=//赋予左侧的变量=左侧的变量*右侧的变量
%=//赋予左侧的变量=左侧的变量%右侧的变量
-=//赋予左侧的变量=左侧的变量-右侧的变量
+=//赋予左侧的变量=左侧的变量+右侧的变量
4.运算符的优先级
一般情况下,一元运算符>二元运算符>三元运算符