抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

语言→类库→框架(有一定逻辑组织的类库)

资料
离线MSDN文档
C#语言定义文档
C# 5.0 In A Nutshell

WPF:Windows Presentation Formation

类&命名空间

类:构成程序的主体
命名空间:以树形结构组织类

1
2
3
4
5
6
7
8
9
10
11
12
using System	//引用命名空间 *引用过多命名空间可能导致冲突
name space HelloWorld //放在HelloWorld的命名空间中
{
class Program //C#完全面向对象,主程序也是一个类
{
static void Main(string[] args)
{
Console.WriteLine("Hello,World!") //C#中封装的类
//全限定名:System.Console.
}
}
}

类库的引用

类库:使用命名空间的物理基础
建立不同项目模板时引用了对应项目的类库,加载不同编辑器

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
2
dynamic a = 100;
a = "Hello";
类型包含信息:
  • 提示占用空间
  • 可表示范围
  • 该类型包含成员(方法、属性、事件)反授:取得类型的方法和属性后便可以动态调用
  • 此类型由何基类派生
  • 程序运行时分配在内存中位置
    栈:对方法的调用。可能导致栈溢出的行为:递归不当、内存分配过多(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
2
Student *pStu = new Student();
pStu->SayHello();

方法的声明和定义

命名规则:动词/动词短语&单词首字母大写
():方法调用操作符
方法修饰符:
public:
static:静态方法

构造器

实例构造函数

评论