首页 > 编程语言 > 详细

C#学习笔记二 (资源托管,泛型,数组和元组,运算符和类型强制转换)

时间:2019-05-04 10:24:13      阅读:144      评论:0      收藏:0      [点我收藏+]

 

1.托管资源是指GC管理的内存空间,非托管资源是指文件句柄,网络连接,数据库连接等。

2.方法中临时申请的变量,被存放在栈中。栈存储非对象成员的值数据。例如在方法中有B b=new B(); b的值在栈中,new B()的数据在堆中,相当于指针与目标数据的关系。

3.GC工作的主要方式是将不被引用的内存进行释放,然后进行数据移动,从而使得被引用的内存空间总是连接成片的。例如某个对象的位置被移动后,new B()的结果的实例的数据被移动,那么b的值也会变动,从而始终指向new B()结果的实例的位置。

4.强应用就是如b=new B();弱引用的意义是运行被引用的对象被GC释放,比如如果b对new B()是弱引用的,某个时间点new B的结果被释放,那么b的结果就会变成null,具体如何使用现在用不到,不写了。

5.释放非托管资源的方式,可以是析构函数,finallize终结器和实现System.IDisposable接口。但无法确定析构函数何时执行,或者由于多个终结器同时运行会造成性能问题,因此最好使用IDisposable接口。

6.关于C#的指针代码,以后再学。

7.平台调用,即如果用C#调用dll中的api等,用到的时候再学。

 

从值类型转换为引用类型成为装箱。如果方法需要把一个对象作为参数,同时传递一个值类型,装箱就会自动进行。装箱的值类型可以使用拆箱操作转换为值类型,在拆箱时,需要使用类型强制转换运算符。

在JIT编辑器把泛型类编译为本地代码时,会给每个类型创建一个新类。引用类型共享同一个本地类的所有共同的实现代码。这是因为引用类型在实例化的泛型类中只要4个字节的内存地址,就可以引用一个引用类型。值类型包含在实例化的泛型类的内存中,同时因为每个值类型对内存的要求都不相同,所以要为每个值类型实例化一个新类。

Default用于给泛型指定默认值,where用于对泛型T做出约束,如果某个方法对泛型T有要求,也可以用where的做约束;对于泛型的继承,还可以直接指定类型,如 public class B:A<int>{...},这里直接让泛型的类型为int。

协变和抗变,主要和类型转换限制有关,协变<out T>,抗变<in T>。具体的懒得写。

C#学习笔记二 (资源托管,泛型,数组和元组,运算符和类型强制转换)

原文:https://www.cnblogs.com/xiaoahui/p/10807375.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!