# 数据类型
- 值类型:简单类型(如 int、float、bool 和 char)、枚举类型、结构类型、Nullable 值类型
- 引用类型:类类型、接口类型、数组类型、委托类型
描述 | 类型 |
---|
Unicode 字符(16 位) | char |
布尔值 | bool |
有符号整数 | sbyte(8 位)< short(16 位)< int(32 位)< long(64 位) |
正整数 | byte(8 位)< ushort(16 位)< uint(32 位)< ulong(64 位) |
浮点数 | float(32 位)< double(64 位) |
时间 | DateTime |
可空类型:声明时加个 ?
,才可赋值为 null
# 值类型
类型 | 描述 | 范围 | 默认值 |
---|
bool | 布尔值 | True 或 False | False |
byte | 8 位无符号整数 | 0 到 255 | 0 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | '\0' |
decimal | 128 位精确的十进制值,具有 28~29 个有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
double | 64 位双精度浮点型 | (+/-) 5.0 x 10-324 到 (+/-) 1.7 x 10308 | 0.0D |
float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符号整数类型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 |
使用 sizeof()
获取类型或变量的大小
# 引用类型
# 对象类型 Object
# 动态类型 Dynamic
可以存储任何类型的值在动态数据类型变量中
# 字符串类型 String
字符串(String)类型是 System.String 类的别名
通过两种形式进行分配: 引号 和 @引号
| String str = "zhudaidai"; |
| |
| |
| string str = @"C:\Windows"""; |
| 等同于 |
| string str = "C:\\Windows"; |
| |
| |
| string str = @"<script type=""text/javascript""> |
| <!-- |
| --> |
| </script>"; |
# 指针类型
# 运算符
# 算术运算符
假设 A=10 B=20
运算符 | 描述 | 实例 |
---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
-- | 自减运算符,整数值减少 1 | A-- 将得到 9 |
# 关系运算符
假设 A=10 B=20
运算符 | 描述 | 实例 |
---|
== | 检查两个操作数的值是否相等,如果相等则条件为真 | (A == B) 不为真 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真 | (A != B) 为真 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真 | (A> B) 不为真 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真 | (A < B) 为真 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真 | (A>= B) 不为真 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真 | (A <= B) 为真 |
# 逻辑运算符
假设 A=true B=false
运算符 | 描述 | 实例 |
---|
&& | 逻辑与运算符。如果两个操作数都非零,则条件为真 | (A && B) 为假 |
|| | 逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真 | (A || B) 为真 |
! | 逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假 | |
# 合并运算符
合并运算符 ??
:如果第一个操作数的值为 null,则运算符返回第二个操作数的值,否则返回第一个操作数的值
| int? num1 = null; |
| int num2 = num1 ?? 123; |
| |
| |
| int num2 = (num1 == null) ? 123 : num1; |
# 位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
p | q | p & q | p | q | p ^ q |
---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设 A=60 B=13
运算符 | 描述 | 实例 |
---|
& | 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中 | (A & B) 将得到 12,即为 0000 1100 |
| | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中 | (A | B) 将得到 61,即为 0011 1101 |
^ | 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中 | (A ^ B) 将得到 49,即为 0011 0001 |
~ | 按位取反运算符是一元运算符,具有 "翻转" 位效果,即 0 变成 1,1 变成 0,包括符号位 | (~A) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式 |
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数 | A << 2 将得到 240,即为 1111 0000 |
>> | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数 | A >> 2 将得到 15,即为 0000 1111 |
案例
| int a = 60; |
| int b = 13; |
| int c = 0; |
| |
| c = a & b; |
| Console.WriteLine("Line 1 - c 的值是 {0}", c); |
| |
| c = a | b; |
| Console.WriteLine("Line 2 - c 的值是 {0}", c); |
| |
| c = a ^ b; |
| Console.WriteLine("Line 3 - c 的值是 {0}", c); |
| |
| c = ~a; |
| Console.WriteLine("Line 4 - c 的值是 {0}", c); |
| |
| c = a << 2; |
| Console.WriteLine("Line 5 - c 的值是 {0}", c); |
| |
| c = a >> 2; |
| Console.WriteLine("Line 6 - c 的值是 {0}", c); |
| Console.ReadLine(); |
# 赋值运算符
运算符 | 描述 | 实例 |
---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | 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 |
<<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 |
&= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
|= | 按位或且赋值运算符 | C |= 2 等同于 C = C | 2 |
# 其他运算符
运算符 | 描述 | 实例 |
---|
sizeof() | 返回数据类型的大小 | sizeof (int),将返回 4 |
typeof() | 返回 class 的类型 | typeof(StreamReader); |
& | 返回变量的地址 | &a; 将得到变量的实际地址。 |
* | 变量的指针 | *a; 将指向一个变量。 |
? : | 条件表达式 | 如果条件为真?则为 X : 否则为 Y |
is | 判断对象是否为某一类型 | If (Ford is Car) // 检查 Ford 是否是 Car 类的一个对象。 |
as | 强制转换,即使转换失败也不会抛出异常 | Object obj = new StringReader("Hello"); StringReader r = obj as StringReader; |
案例
| Console.WriteLine("int 的大小是 {0}", sizeof(int)); |
| Console.WriteLine("short 的大小是 {0}", sizeof(short)); |
| |
| Type type = typeof(string); |
| Console.WriteLine(type.FullName); |
| Console.ReadKey(); |
# 运算符优先级
类别 | 运算符 | 结合性 |
---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
# 条件 / 分支
# if
| if (条件) |
| { |
| ... |
| } |
| else if () |
| { |
| ... |
| } |
| else |
| { |
| ... |
| } |
# switch
| switch (变量) |
| { |
| case 条件1: |
| ... |
| break; |
| case 条件2: |
| ... |
| break; |
| default: |
| ... |
| break; |
| } |
# 三元运算符
# 循环
循环类型 | 描述 | 使用场景 |
---|
while 循环 | 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件 | 确定循环条件 |
for/foreach 循环 | 多次执行一个语句序列,简化管理循环变量的代码 | 确定次数 |
do...while 循环 | 除了它是在循环主体结尾测试条件外,其他与 while 语句类似 | 至少被执行一次 |
嵌套循环 | 可以在 while、for 或 do..while 循环内使用一个或多个循环 | |
| int i = 0; |
| while(i < 10) |
| { |
| Console.WriteLine(i); |
| i++; |
| } |
| |
| |
| int i = 0; |
| do |
| { |
| Console.WriteLine(i); |
| i++; |
| } while (i < 10); |
| |
| |
| for (int i = 0; i < 10; i++) |
| { |
| Console.WriteLine(i); |
| } |
| |
| int i = 0; |
| for ( ; i < 10; ) |
| { |
| Console.WriteLine(i); |
| i++; |
| } |
| for( ; ; ) |
# 循环控制语句
控制语句 | 描述 |
---|
break 语句 | 结束整个循环 |
continue 语句 | 中止当前循环,继续下次循环 |
# 方法(函数)
| <Access Specifier> <Return Type> <Method Name>(Parameter List) |
| { |
| Method Body |
| } |
| |
| ➡ Access Specifier:访问修饰符 |
| ➡ Return type:返回类型,一个方法可以返回一个值 |
| ➡ Method name:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。 |
| ➡ Parameter list:参数列表 |
| ➡ Method body:方法主体 |
举例
| |
| public void sayHi() { |
| Console.WriteLine("hi"); |
| } |
| |
| |
| public void sayHi(string name) { |
| Console.WriteLine("hi,{0}", name); |
| } |
| |
| |
| public int add(int a, int b) { |
| int sum = a + b; |
| return sum; |
| } |