C# 学习笔记
- [Chapter 1 C# 基础部分](# 基础部分)
-
- [Section 1 类与命名空间](#Section 1 类与命名空间)
-
- [Part 1 命名空间 NameSpace](#Part 1 命名空间 NameSpace)
- [Part 2 类 Class](#Part 2 类 Class)
- [Section 2 基本元素](#Section 2 基本元素)
- [Section 3 数据类型](#Section 3 数据类型)
-
- [Part 1 什么是类型?](#Part 1 什么是类型?)
- [Part 2 类型在 C Sharp 中的作用](#Part 2 类型在 C Sharp 中的作用)
- [Part 3 C Sharp 中的数据类型](#Part 3 C Sharp 中的数据类型)
Chapter 1 C# 基础部分
Section 1 类与命名空间
类库的引用,是使用命名空间的物理基础,不同的技术类型的项目会默认应用不同的类库
- DLL 引用,黑盒引用,无源代码;
- 项目引用,白盒引用,有源代码;
Part 1 命名空间 NameSpace
命名空间的目的是提供一种让一组名称与其他名称分隔开的方式,在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。
声明方法如下:
cs
namespace namespace_name
{
// 代码声明
}
using关键字表明程序使用的是给定命名空间中的名称,例如使用 System 命名空间中的Console类,可以这样写:
cs
Console.WriteLine();
如果没有使用 using 关键字,则可以写完全限定名称:
cs
System.Console.WriteLine();
命名空间是可以嵌套的,使用点( . )运算符访问嵌套的命名空间的成员;
Part 2 类 Class
依赖关系: 类或对象之间的耦合关系应追求 "高内聚,低耦合" 的原则。
什么是类:
- 类 Class 是现实世界事物的模型;
- 类与对象的关系
-
- 什么时候叫"对象",什么时候叫"实例" : 对象与实例是一回事儿,是类经过 实例化 后得到的内存中的实体;但有些类是不能实例化的;实例化是依照某个类,创建对象,就是实例化。抽象的说就是魔鬼附体,魔鬼是虚拟的,附体以后是实体,就是实例化;使用 new 操作符创建类的实例;
-
- 引用变量与实例的关系:引用变量这个概念是非常重要的,使用引用变量的方法,可以连续操作同一个实例,如下所示;
cs
Form myForm;
myForm = new From();
myForm2 = myForm; // 二者引用的是同一个实例,操作同一个实例;
- 类的三大成员
-
- 属性 Property:专门用于存储数据,数据组合起来可以表示类或对象当前的状态,也有称作"字段";
-
- 方法 Method:表示类或对象可以做什么,就是函数,就是算法;
-
- 事件 Event:类或对象通知其他类或对象的机制,为C#所持有
- 类的静态成员与实例成员:静态 (Static) 成员在语义上表示它是"类的成员",实例 (非静态) 成员在语义表示它是"对象的成员",不是属于某个类;
-
- 关于绑定 Binding:指的是编译器把一个成员与类或对象关联起来;
Section 2 基本元素
构成 C# 语言的基本元素
- 关键字 Keyword
- 操作符 Operator:用于表达运算思想的符号;
- 标识符 Identifier:名字,必须以字符或下划线开头,C Sharp大小写敏感,变量名用驼峰法(类似 myForm 这种写法),方法名用Pascal法(所有的单词首字母大学)
- 标点符号
- 文本
- 注释与空白
前五项统称为标记 Token,也就是对于编译器而言是有用的
Section 3 数据类型
Part 1 什么是类型?
- 类型 Type,也叫做数据类型 Data Type,是性质相同的值的集合,且配备了一系列专门针对这种类型的值的操作。
- 是数据在内存中储存时的型号;
- 小内存容纳大尺寸数据会丢失精度、发生错误;
- 大内存容纳小尺寸数据会导致浪费;
- 编程语言的数据类型与数据的数据类型不完全相同;
Part 2 类型在 C Sharp 中的作用
一个C#类型中所包含的信息由:
- 储存此类型变量所需的内存空间大小;
- 此类型的值可表示的最大、最小值范围
- 此类型所包含的成员(如方法、属性、事件等);
- 此类型由何基类派生而来
- 程序运行的时候,此类型的变量在分配在内存的什么位置
- Stack简介
- Stack Overflow
- Heap简介
- 使用Performance Monitor查看进程的堆内存使用量
- 关于内存泄漏
- 此类型所允许的操作(运算)
Type | Range | Size |
---|---|---|
sbyte | -128 to 127 | Signed 8-bit integer |
byte | 0 to 255 | Unsigned 8-bit integer |
short | -32,768 to 32,767 | Signed 16-bit integer |
ushort | 0 to 65,535 | Unsigned 16-bit integer |
int | -2,147,483,648 to 2,147,483,647 | Signed 32-bit integer |
uint | 0 to 4,294,967,295 | Unsigned 32-bit integer |
long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | Signed 64-bit integer |
ulong | 0 to 18,446,744,073,709,551,615 | Unsigned 64-bit integer |
C# type/keyword | Approximate range | Precision | Size | .NET type |
---|---|---|---|---|
float | ±1.5 x 10^−45 to ±3.4 x 10^38 | ~6-9 digits | 4 bytes | System.Single |
double | ±5.0 × 10^−324 to ±1.7 × 10^308 | ~15-17 digits | 8 bytes | System.Double |
decimal | ±1.0 x 10^-28 to ±7.9228 x 10^28 | 28-29 digits | 16 bytes | System.Decimal |
程序在写代码、编译时为静态时期,运行调试为动态时期
Stack 栈,是给方法调用使用的;Heap 堆,是用来存储对象的;
一般栈比较小,堆比较大;
程序在堆里面分配对象,使用完后没有回收,浪费掉内存,也叫做内存泄漏;
在C Sharp里面没有手动回收,有自动机制回收;
cs
// 例子:
class BadGuy
{
public void BadMethod()
{
int x = 100;
this.BadMethod();
// 只递不归,会导致栈爆掉 Stack Overflow
}
}
// int 有7为总共2097152字节,下面的例子会导致栈爆掉,编译无问题但会 Stack Overflow
unsafe
{
int* p = stackalloc int[9999999];
}
Process 进程:程序运行后的实例,运行后有程序ID,叫做PID
使用 perfmon 打开性能监视器
Part 3 C Sharp 中的数据类型
C Sharp 中的五大数据类型
- 类 Classes 例如Windows,Form,Console,String (对于初学者用的最多)
- 结构体 Structures 例如 Int32,Int64,Single,Double(对于初学者用的最多)
- 枚举 Enumerations 例如 HorizontalAlignment,Visibility
- 接口 Interface
- 委托 Delegates