[空白音频]
嗨,同学你好! 我们下面呢再介绍一下 C#
语言当中的其他一些成分 一个呢是编译预处理
编译预处理呢我们在 C 语言当中呢很常见了
就是我们说的定义宏,那在这里面呢最基本的 define 也是可以用的 也是可以用。
但这个 define 呢它不像我们 C 语言或 C++
语言那么 复杂,它只能定义一个标识符
只能定义一个标识符,就是 define 和 undefine 只能取消或者。
这样的话就避免了像 C 语言我们定义特别复杂的宏呢容易出错,也不好理解
它可以呢用用 if
和 elif 等等,然后呢来判断某个标识符
是否存在,是否定义了或者说没定义。
所以它实际上这两个呢是 相关联的,它不能写判断其他复杂的东西,它只能判断一个是否定义了
另外一个呢,我们也可以有其他一些指令,包括 error 来报告一些错误 warning
等等 也可以定义行号,所以这个编译处理呢它目的是给编译器
一些特殊的一些,我们在编译之前,在 普通的转成定义之前做一个处理。
但这个常用的情形呢是这个定义一个,比如说
我要针对一个编译,针对一个大屏幕的版本和一个 小屏幕的两个版本。
那我就可以呢定义一个 定义一个变量它是否是针对大屏幕的。
然后下面呢我们就又可以在 if 里头呢 这一段代码编译还是不编译。
所以这个是跟 C 语言呢有点相似的 另外一个呢是
unsafe unsafe 呢就是这个关键词呢,它是用于修饰类啊、
方法呀等等 它主要是用到一些非安全的
我们知道呢 C# 里头,它是一些对象它都是安全的
然后这些对象呢也不用释放,它是,因为这个指针呢,这个引用呢 是有系统来自动管理的,如果我们要用指针的话,这个
就是非安全的,unsafe,所以这里
指针呢,我们在用指针的时候,这个指针呢不是我们一般的引用那个指针了 这就是真正的像
C++ 里面那种指针 也是可以用的,所以你一个是要标记,标记unsafe,另外一个呢
这个指针怎么用呢?就 fixed,就固定这个指针
这个指针呢它是一个什么样的类型?一个 *,这个就跟我们 C 语言差不多了
什么类型的指针名字等于一个表达式,这个表达式呢 一般都是,比如说一个地址,
new 一个对象等等 所以这个呢就属于指针。
另外还有一个运算符呢叫 sizeof sizeof
呢主要取于结构体,或者像 int 这种值类型的
或者结构体它的那个占的空间 跟 C++ 相似。
另外我们可以在 stackalloc 它是在栈上分配空间,等等吧,这些呢主要是跟指针
和我们早期的 C 语言呢兼容来考虑的。
比如下面这个例子 如果我们要用系统的
这个 ReadFile 这个函数,这个
ReadFile 函数呢我们就要用到一些指针,这个时候我们就要 就要用到
dllimport 它这个意思呢就相当于使在 C#
里头 调用我们系统的,或者我们其他地方编写的
最常见的是用 C 语言来编写的这个 这些库文件里的函数,就要用
dllimport 在这个库里面就是这个 dll 里头。
那这里面我们要用的这个指针呢你就要用 fixed fixed
byte 这个指针等于我们这个数组,这个数组的地址 然后再进行操作。
所以,在一定意义上,C# 里面 就可以使用
C++ 或者 C 语言里面的那种 指针。
但是我们主要是在处理一些 内存操作比较频繁的时候,或者调用 web,以前就是用 C
语言写的,我们才用指针 所以指针呢可以用,但是呢要少用
还有一些关键词,以后我们会讲到。
比如说这里跟线程相关的 lock
锁定,还有呢其他的一些关键词,我们这里呢只是列举一下,到用的时候呢再会给大家讲