文章目录
点击访问 C# 官方文档
1、注释
- 单行注释:
//xxx
- 多行注释:
/*xxx*/
- 特定注释:
///
2、折叠代码
- 由 #region 和 #endregion 配对出现;使长篇代码更清晰
- 是编辑器提供给我们的 预处理命令,只在编辑时有用(说白了就是给程序员看的)
#region 折叠区域名字
// 这里是为了处理一个事务的一大堆逻辑的代码
#endregion
3、C# 的类型系统
-
-
-
有符号整型:
sbyte
、short
、int
、long
-
无符号整型:
byte
、ushort
、uint
、ulong
-
Unicode 字符:
char
,表示 UTF-16 代码单元 -
IEEE 二进制浮点:
float
、double
-
高精度十进制浮点数:
decimal
-
布尔值:
bool
,表示布尔值(true
或false
) -
enum E {...}
格式的用户定义类型。enum
类型是一种包含已命名常量的独特类型。 每个enum
类型都有一个基础类型(必须是八种整型类型之一)。enum
类型的值集与基础类型的值集相同。
-
- 格式为
struct S {...}
的用户定义类型
- 格式为
-
- 值为
null
的其他所有值类型的扩展
- 值为
-
-
- 格式为
(T1, T2, ...)
的用户定义类型
- 格式为
-
-
-
-
其他所有类型的最终基类:
object
-
Unicode 字符串:
string
,表示 UTF-16 代码单元序列 -
格式为
class C {...}
的用户定义类型 -
- 格式为
interface I {...}
的用户定义类型
- 格式为
-
- 一维、多维和交错。 例如:
int[]
、int[,]
和int[][]
- 一维、多维和交错。 例如:
-
-
- 格式为
delegate int D(...)
的用户定义类型
- 格式为
-
4、常量 const
- 必须初始化
- 不能被修改
const int xxx = 0;
5、转义字符 \
- 在字符串中呈现特殊字符,例如双引号
string str = "abc\"def"; // abc"def
- 取消转移符号
@
string str = @"abc\tdef"; // abc\tdef
6、类型转换
6.1、隐式类型转换(自动)
低精度可自动转高精度
以下三类也可交叉转换,前提必须是小类型可自动转大类型,大类型范围必须完全包含小类型范围
- 有符号:sbyte >>> short >>> int >>> long
- 无符号:byte >>> ushort >>> uint >>> ulong
- 浮点型:float >>> double ××× decimal
- decimal比较特殊,它不能被float和double隐式转换,但可隐式存储整型
特殊类型单独拎出来说明如下:
- bool ××× 不能隐式转也不能隐式被转
- char 只能将其对应的ASCII码隐式转换为整型(其实就是int),然后int又隐式转换成其他可转换的类型
- string ××× 不能隐式转也不能隐式被转
6.2、显式类型转换(手动)
6.2.1、括号强转
- 高精度强制转换为低精度
- 不支持:bool 和 string
- 问题:精度丢失和数据溢出
int i = 1;
byte bt = (byte)i;
6.2.2、Parse 专门针对字符串
- 把字符串强制转换成其他类型
- 必须符合要转换成的类型的格式和范围否则编译报错,
// 正常转
string strnum = "18";
int num01 = int.Parse(strnum);
float f = float.Parse(strnum);
bool bo = bool.Parse(strnum);
// 直接报错栗子
// int num = int.Parse("123.45");
6.2.3、Convert
- 更准确的将 各个类型之间进行相互转换
Convert.ToXxx(参数)
- 填写的变量或常量必须正确(字符串和parse一样的规则)否则编译报错
- 转数字比第一种括号强转人性化一点,精度丢失时会四舍五入
// 正常转
int num = Convert.ToInt32(4.5); // 5
int numTrue = Convert.ToInt32(true); // 1
int numFalse = Convert.ToInt32(false); // 0
float flo = Convert.ToSingle("123.456789"); // 123.4568
// 直接报错栗子
// int num = Convert.ToInt32("123.45");
6.2.4、其他类型转string
.toString()
+
:字符串拼接
int num = 18;
string str0 = num.ToString();
string str1 = num + "";
7、异常捕获
try {
// 可能抛出异常的代码
} catch (Exception e) { // 不关心到底是什么引起的异常时,捕获信息(Exception e)可省略
// 异常处理
} finally {
// 必执行的代码
}
8、运算符
8.1、算数运算符
- 赋值符号: =
- 算数运算符(优先级:*/% >>> ±)
- 加:+
- 减:-
- 乘:*
- 除以: /
- 取余:%
- 复合运算符:+=、-=、*=、/=
- 自增减
- ++
num = i++
;num是inum = ++i
:num是i+1
- 同++
- ++
8.2、字符串拼接
+
string str = "abc-" + 1 + 2; // "abc-12"
str += 2 + 3 + "-xx"; // "abc-125-xx"
string s2 = true + "-a"; // "True-a"
string.Format("待拼接内容", ..."内容段")
string name = "小白";
int age = 18;
string hobby = "吃饭睡觉打代码";
Console.WriteLine(string.Format("我是{0},今年{1}岁,爱好:{2}", name, age, hobby));
// 我是小白,今年18岁,爱好:吃饭睡觉打代码
8.3、条件运算符
- 大于:>
- 小于:<
- 等于:==
- 不等:!=
- 大于等于:>=
- 小于等于:<=
8.4、逻辑运算符(优先级:! >>> &&||)
- 逻辑与:&&
- 逻辑或:||
- 逻辑非:!
8.5、位运算符
- 位与:&
- 有0则0
- 栗子:
1&5 = 1
- 位或:|
- 有1则1
- 栗子:
1&5 = 5
- 异或:^
- 相同为0,不同为1
- 小公式:m = m ^ n ^ n
- 栗子:
1^5 = 4
- 位取反:~
- 对位运算,1变0,0变1
- 栗子:
~5 = -6
(负数转二进制需要取反+1)
- 左移:<<
- 相当于往右补位(用0补位)
- 左移几位就×2的几次幂
- 栗子:
1<<5 = 32
- 右移:>>
- 相当于往往左补位(用最高位数字补位)
- 右移几位就÷2的几次幂
- 栗子:
32>>5 = 1
8.6、三目运算符
bool : true ?false
8.7、其他运算符
sizeof(int)
:查看占用内存大小- console:4
typeof(int)
:查看类型- console:System.Int64
is
:判断对象是否属于一个类型13 is int
:true
as
:强制类型转换(只适用于支持空值的类型转换)string s = obj as string
- 与
string s = (string)obj
唯一区别就是转换失败不会报错,会给赋空
9、条件分支
-
if
-
switch
10、循环
-
for
-
foreach
-
int [] B = { 11,22,33,44,55 }; foreach(int t in B){ Console.WriteLine(t); } // 11 22 33 44 55
-
-
while
-
do…while