【C#】06-07类型、变量、对象

类型

是什么

类型(数据类型):性质相同的值的集合,有专门的具体操作

确定了数据类型,就知道在内存中占多大
内存给小了,会丢失精度(显式类型转换)
内存给大了,会造成浪费(隐式类型转换)

强类型编程语言:数据类型有约束
弱类型编程语言:数据类型无约束

作用

  1. 明确占用内存空间
  2. 明确可表示最大、最小范围
  3. 明确所有成员(方法、属性、事件)
  4. 明确派生关系
  5. 明确内存分配具体位置
  6. 明确允许的操作
Type myType = tepeof(Form);
Console.WriteLine(myType.IsClass);   // 是不是类
Console.WriteLine(myType.Name);  // 打印类型名Form
Console.WriteLine(myType.FullName);  // 打印类型全名
Console.WriteLine(myType.BaseType.FullName);  // 打印类型基类全名
Console.WriteLine(myType.BaseType.BaseType.FullName);  // 打印类型基类的基类全名

// 打印所有属性
PropertyInfo[] plnfos = myType.GetProperties();
foreach (var p in plnfos)
{
	Console.WriteLine(p.Name);
}

// 打印所有方法
MethodInfo[] mlnfos = myType.GetMethods();
foreach (var p in mlnfos)
{
	Console.WriteLine(p.Name);
}
  • 栈(小,几M)stack:方法调用
  • 堆(大,几个G)heap:存储对象(实例)

类型系统

类(Classes):如Windows, Form, Console, String
结构体(Structures):如lnt32, Int64, Single, Double
枚举(Enumerations):如HorizontalAlignment, Visibility
接口(Interfaces)
委托(Delegates)

派生谱系
水蓝色都是能跳转的,黑色都是需要补充的

变量、对象、内存

变量名:表示变量值的存储位置

7种变量:

  • 静态变量:static,不用实例化就可以使用
  • 成员变量(字段):类似属性,但是裸露在外,不受保护
  • 数组元素:int[] array = new int[100];第一个元素:array[0],最后一个元素:array[99]
  • 值参数:普通参数
  • 引用参数:ref
  • 输出形参:out
  • 局部变量:方法体中的变量

变量 = 以变量名所对应的内存地址为起点,以其数据类型所要求的存储空间为长度的一块内存区域

值类型存储:根据大小直接放在堆中,从高位往低位存
引用型存储:(1)Student stu,会创建一块地址区域(32位就是4个字节,64位就是8个字节),内容统统刷0(表示该变量没有引用任何实例)用于存储堆的地址;(2)stu = new Student();才会去堆里创建实例,根据uint ID和ushort scroe分配内存空间

其他

有符号(正->负):按位取反+1

局部变量在栈上分配内存
实例变量在堆上分配内存

值类型:默认情况下,值类型存储在栈上,但当被装箱时,它们在托管堆上分配空间。
引用类型:存储在托管堆上,但是引用(即指向对象的指针)存储在栈上或作为局部变量。
局部变量:无论是值类型还是引用类型,作为方法的局部变量,它们的引用或值通常存储在栈上。
静态变量:静态变量存储在托管堆上,因为它们属于类型本身,而不是任何特定的实例。

常量(const):不能被再次赋值,且初始化器不能省略,就是一开始就要赋值,通常变量名全大写

装箱(值->引用)&拆箱(引用->值):会损失性能

int x = 100;

object obj = x;  // 引用的不是堆上的实例,而是栈上的值(即先把x装箱,在赋给obj)

(栈->堆)装箱:把值拷贝到堆上,再把地址存在obj开辟的空间中

(堆->栈)拆箱:把堆中的值挪到栈上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值