.NET精髓(个人理解)

   经过一段时间的实践和理论学习以后,自己对.net又有了更深的一点理解,主要有以下方面吧~

1 .net的核心是clr,他将完成以下工作
运行过程是  原码---编译为IL---转换为平台专用代码

2 C#是放在.NET下的托管代码
  所谓托管代码就是依附在其他平台下的由平台管理的代码

3 托管代码的优点
  IL与JAVA的字节编码采用相同的设计理念:低级语言,语法简单(采用数字代码,而不是文本代码),可以高速的转  换为内部机器代码
  1)平台无关性
    所有字节编码都可以在不同平台下运行
    因此,编译为IL和JAVA字节编码的都可以在不同平台下运行
    但是,.Net是种谎言,因为他的开发是针对Windows平台的
  2)性能方面
    IL代码是即使编译的,而JAVA字节代码常常是解释性的,因此他要将JAVA字节代码转换为内部可执行代码的过程会导致性能的损失
    JIT编译器并不是一次性的将这个应用程序编译完,而是只编译调用他的那部分代码,并且将这部分编译的代码保存起来,以后在运行这部分应用程序时就不必在进行编译,直接运行就OK了,而不采用编译这个应用程序的原因是因为在运行时,并不需要所有的应用程序,这样编译这个显得有点浪费
  3)语言的互操作性
    其实这种互操作性是由中间语言来进行的:要交互的语言都会转换为中间语言,而正是中间语言实现了互操作性
4 CTS的作用
  当我们在多种语言之间进行互操作时,就必须知道各种语言直接的数据类型是怎么转换的,如VB和C#之间是怎么转换的,CTS就做这个的,CTS中存储了所有IL的数据类型,这样不同语言进行交互时,不同语言都会转换为IL,起类型也会转换为IL对应的CTS类型,这样,由IL使用CTS就实现了不同语言之间类型的转换

5 垃圾收集
  当前管理内存使用的方法有以下几种:
  1)手工代码实现内存释放---这应该是低级 高性能的语言使用管理内存的方法
  2)维护引用记数--COM对象使用的管理内存的方法,原理就是当我使用COM对象时会将记数增加,当不使用时会将记数置为0,组件COM对象看到自己的记数为0,会删除自己并释放自己使用的资源。
  3)垃圾收集器--他是一个程序,负责内存管理。.net中所有动态请求的内存都分配到堆上,当.net检测到某进程的托管堆上的内存已满,就会将该堆上的内存清理掉。另外他的调用是由.net来决定的,可以通过手动的方式来显示调用垃圾收集器

6 安全性
  管理安全性的方法主要有2个:
  1)基于角色的安全性--它是建立在运行某进程的帐户的身份基础上的
  2)基于代码的安全性--它是建立在代码实际执行的任务和可信程度上的

7 应用程序域
  就是将应用程序划分为不同的域
  这里涉及到一个问题,进程间的访问--一个进程访问他的内存是通过虚拟内存中存放的内存的地址来找到他使用的内存的,这样,一个进程不可能之间访问另一个内存

8 程序集
  他是一个编译好的,具有自我描述功能的逻辑单元,可以存放在多个文件上(若放在多个文件上,必须有一个包含入口点的主文件,他将描述该程序集的其他文件)。他包含的元数据描述了对应代码的类型和方法,也包含描述程序集本身的元数据,他包含在程序集清单中,通过这个元数据可以查看程序集的版本和完整性。
  分类:
  1)私有程序集--只由某个应用程序使用的程序集,可以与其他程序集同名
  2)共有程序集--可以由多个应用程序共同使用的程序集,这里要注意,程序集的名称不能发生冲突
  反射--因为程序集中的元数据记载了该程序集的很多属性,因此,我们可以获取该程序集的信息,方法是通过反射  
        他可以在运行时获取程序集的信息,也可以在运行时加载某个程序集中的方法等

 

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

JL99000

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值