语言→类库→框架(有一定逻辑组织的类库)
资料
离线MSDN文档
C#语言定义文档
C# 5.0 In A Nutshell
WPF:Windows Presentation Formation
类&命名空间
类:构成程序的主体
命名空间:以树形结构组织类
1 | using System //引用命名空间 *引用过多命名空间可能导致冲突 |
类库的引用
类库:使用命名空间的物理基础
建立不同项目模板时引用了对应项目的类库,加载不同编辑器
DLL引用(黑盒引用)
DLL:动态链接库(类库)
NuGet引用:解决复杂的依赖关系
项目引用(白盒引用)
一个项目可被包含在不同Solution中(Project重用),一个Solution也可添加不同Project
Root cause
依赖关系
优秀的程序:高内聚,低耦合
UML(通用建模语言)类图
类、对象
类(class):对现实世界事物(实体+逻辑)抽象(建模:去伪存真&由表及里)得到的结
对象(实例):类经过实例化后得到内存中的实体,使用new操作符创建实例
引用变量与实例的关系
引用变量:孩子
实例:气球
气球可以没有孩子牵着(new操作符)
孩子可以没有气球(仅创建引用变量)
多个孩子可以牵着同一个气球(多个引用变量引用同一个实例)
多个孩子用同一根绳子牵着同一个气球
*Form的实例就是窗口
属性、方法、事件
属性:存储数据,用于表示类或对象当前状态
方法:由C语言中的函数进化而来,用于表示类或对象能做什么
事件:类或对象通知其他类或对象的机制(窗体按钮改变文本的例子)
静态成员、实例成员
静态成员:隶属于类的成员
实例成员:对象的成员
基本元素、类型、变量、方法、算法
构成C#的基本元素:关键字、操作符、标识符、标点符号、文本、注释与空白
类型、变量、对象
类型:性质相同的值的集合
Form就是一种类型
强弱类型编程语言
强类型:数据严格受数据类型约束
e.g.C#(比C更严格,赋值运算无法输出为布尔运算)
弱类型:数据不严格受到类型约束
e.g.JavaScript
C#对弱类型的模仿
1 | dynamic a = 100; |
类型包含信息:
- 提示占用空间
- 可表示范围
- 该类型包含成员(方法、属性、事件)反授:取得类型的方法和属性后便可以动态调用
- 此类型由何基类派生
- 程序运行时分配在内存中位置
栈:对方法的调用。可能导致栈溢出的行为:递归不当、内存分配过多(stacklloc
强制在栈上分配内存)
堆:对象存储,实例就存储在堆内。不同于C++,C#内有垃圾收集器回收内存,不易出现内存泄露 - 此类型允许操作
整型
- sbyte:8位(-128-127)
- byte:8位(0-255)
- char:16位
- short
- ushort:16位(0-65535)
- int:32位
- uint
- long:64位
- ulong
浮点型
- float:32位(最多7位小数)
- double:64位(最多15位小数)
C#中数据类型
五大类型:类(Form)、结构体(int、long)、枚举(enum)、接口、委托
C#数据类型系统
基类型:Object
引用类型:类、接口、委托
由class、interface、delegate定义
声明时仅分配地址,实例真正存储数据
值类型:结构体、枚举
由struct、enum定义
基本(内建)数据类型:int、long…用于定义其他类型
变量
变量表示存储位置(变量名表示变量值在内存中存储位置),并且每个变量都有一个类型,以决定什么样的值能够存入变量
变量类型:
静态变量(静态字段):static
实例(非静态成员变量、字段):属性的雏形,在堆上分配内存
数组元素:int[] array = new int[100];
值参数:double a
引用参数:ref double a
输出形参:out double a
局部变量:函数体内声明的变量,在栈上分配内存
装箱:从栈中值封装成object类型实例搬到堆,栈上留存该堆地址
拆箱:把堆上的值移到栈
对象
内存
方法的定义、调用、调试
function(面向过程)→method(面向对象)当函数以类的成员出现时即为方法(成员函数)
1 | Student *pStu = new Student(); |
方法的声明和定义
命名规则:动词/动词短语&单词首字母大写
():方法调用操作符
方法修饰符:
public:
static:静态方法
构造器
实例构造函数