c# 基础知识记录
2022/7/4 1:21:38
本文主要是介绍c# 基础知识记录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
关于using using Student = System.Student extern alias 外部别名 类型对象,定义一个类,就会生成一个类型对象。如果对象引用了这个类的实例,CLR会保证先把类的类型对象加载到堆上面去 类型对象上面有什么? 类型对象指针、同步块索引、静态字段 一张方法表,类上面自己定义的方法 构造一个类的实例,会在堆上面构造好,实例也有类型对象指针、同步块索引,CLR把实例的的类型对象指针指向了类型对象 注意类的最基类的类型对象,类型对象指针,都会指向Type的类型对象上面去,Type类型对象的类型对象指针指向自己 同时在栈上面,会有一个变量指向着堆上构造好的这个实例 调用实例方法或者类的静态方法,第一件事都是先找到这个类的类型对象,然后才是在类型对象的方法表里,找方法 有可能方法是从基类继承过来的,所以需要顺着基类的类型对象接着找 日常写法 int a = 0; 实际的写法 System.Int32 a = new System.Int32(); // 还是要构造实例 之所以能用int,可以想象成,打头的位置,有一句 using int = System.Int32; byte b = 100; // 发生溢出 b = (byte)(b+200); // 溢出检查,注意可以在工程文件上配置,检查溢出 b = checked((byte)(b + 200)); // 或者 checked { // ... } 类型也分成值类型、引用类型 值类型也是类,构造时也会构造出来一个实例,但是注意,值类型的实例不是存储在堆上的,而是在栈上面,也不在CLR垃圾回收的范围,值类型的实例被回收时,不会调用类上面的 Finalize方法 Object->ValueType->值类型/Enum枚举类型 如果一个引用类型中,有几个值类型的成员,那么引用类型的实例部分,将全部分配到堆上头去 值类型复制时,要构造一个实例,把老的实例的所有东西都复制一份,然后新的实例依然分配在栈上面 堆类型复制时,仅仅拷贝实例的地址,赋值给栈的一块变量 c#代码里头出现的object类型,特指的是已经排除了值类型之外的类,其实就是引用类型 值类型和引用类型的机制不一样,因此从值类型赋值给引用类型,必须转换,也就是装箱- 装箱其实就是在堆上面,分配一个对象,增加了必须的两个字段,类型对象指针,同步块索引,然后把那些值都拷贝过去,返回对象地址
- 当把一个对象赋值给一个值类型变量时,就需要拆箱,拆箱就是找到堆上头的那个实例的地址,如果拆箱完了是赋值给一个变量的话,那么紧接着就把堆上面的对象的数据,挨个儿赋值给栈上头的那个值类型实例
- 调用结构体的ToString方法,如果此方法是Object派生的方法,就需要装箱,否则结构体自己重写的不需要
- 将结构体赋值给一个接口类型,结构体实现了这个接口,由于接口全部被定义成引用类型,因此需要装箱
- 调用Object上面的GetType需要装箱
这篇关于c# 基础知识记录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统