好想听听你眼中的.Net和C#的关系 好想听听大神眼中的.Net和C#的关系。希望大神谈谈.Net和C#到底是什么关系?希望能说的越具体越长越好~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 .Net是个框架,c#是开发语言,基于.Net框架上使用 .net 是砖头水泥vb和c# 是建筑方法 电脑上安装.NET后,就相当于安装一个平台,所谓的平台就是各种.NET之下的语言都可以再这上面运行,.NET平台就好比乒乓球台,上面可以打白色的球(c#)也可以打黄色的球(vb.net),你不能在上面打篮球(java)。简而言之就是为.NET平台上的语言门提供了运行必须的环境(乒乓球少了乒乓球台你打飞机么?)。 C#是一种语言 Unity 3D可以使用C#来写游戏,但Unity3D不是.NetC# VB.NET F# J# ...可以通过vs中的编译器编译成IL语言(IL遵守.Net的规定,就好像我们的耳线,USB每个厂家生产的都一样大,可以通用,但也有像苹果自己搞特殊的) .Net负责编译和运行IL语言用一个比喻C# VB.NET F# J# ... 汉语,日语,韩语,英语.... ↓ ↓ IL 地球语言 ↓ ↓ .Net 外星语言翻译器 ↓ ↓ 机器码 外星语言 那CLR和.Net又是什么关系? CLR:公用语言运行时,是个环境.NET:是个平台,包含所有 .net framework 的核心是运行库执行环境,称为公共语言运行库(CLR)或.NET运行库。通常将在CLR控制下运行的代码成为托管代码。 http://developer.51cto.com/art/200910/158022.htm.net定义了各种规定, CLR是那个执行规定的人C# VB.NET F# J# ... ↓ IL ↓ .Net(CLR) ↓ 机器码 C# VB.NET F# J# ... ↓ .Net(IL) ↓ .Net(CLR) ↓ 机器码 应该是这样才对 首先是.net的出现,当时ms的人明确表示,这个东西是为了把所有不同语言的人集合到一起开发东西的然后就有了各种语言的.net版本支持楼上某人用语言做例子 托管和非托管,clr上运行的都是被clr托管的。 那如果不在clr上运行,是不是只能叫“堆”,不能叫“托管堆”了? 还有一个问题哈。为什么“堆”我们叫他“托管堆”;而“栈”我们又叫“线程栈”??给变量分配内存的时候,有2种分配方式,所以也产生2中回收方式大变量分配在堆上,由于CRL有垃圾回收功能,所以我们就不用手动释放内存,因为不用我们打理了,就如被托管了一样~栈是另外一种方式,在底层,是的~底层~等我炫耀一下我的底层知识在一函数中,参数还有函数中的变量,会逐一被压入栈中,等函数运行完毕就必须平衡栈对栈使用的内存进行释放。如果栈中的参数或变量是int bool这种值类型,那么出栈的时候立刻被释放掉如果栈中的参数或变量引用类型,那么他们出栈的时候不是立刻被回收,只是失去了引用等CRL这个托儿所来回收分配在栈上的内存(值类型)由线程自己回收(线程平衡栈的时候) 所以叫线程栈分配在堆上的内存有CRL来回收 所以叫托管堆http://www.cnblogs.com/fantiantian/archive/2012/05/29/2520673.html 字符串位置互换问题 这样简单的验证码怎么识别? 为啥我的tcp服务端只能接受一次消息呢? 如何实现异步刷新 installshield打包问题。在卸载的时候,我想删掉某个文件夹,我看网上的资料是写在OnUnInstalled里面,问题是 请问如何利用视图或临时表实现一种复杂的统计查询 多种语言实现俄罗斯方块 【散分!!!!!!】 vs2005,static自动去掉问题 急呀!!!怎么样删除选定的listView的项呢? C#程序报错 改如何修改? C# 连接SQL ....(在线等 新手)
vb和c# 是建筑方法
Unity 3D可以使用C#来写游戏,但Unity3D不是.NetC# VB.NET F# J# ...
可以通过vs中的编译器编译成IL语言(IL遵守.Net的规定,就好像我们的耳线,USB每个厂家生产的都一样大,可以通用,但也有像苹果自己搞特殊的)
.Net负责编译和运行IL语言用一个比喻
C# VB.NET F# J# ... 汉语,日语,韩语,英语....
↓ ↓
IL 地球语言
↓ ↓
.Net 外星语言翻译器
↓ ↓
机器码 外星语言
那CLR和.Net又是什么关系?
.NET:是个平台,包含所有
C# VB.NET F# J# ...
↓
IL
↓
.Net(CLR)
↓
机器码
↓
.Net(IL)
↓
.Net(CLR)
↓
机器码 应该是这样才对
那如果不在clr上运行,是不是只能叫“堆”,不能叫“托管堆”了?
还有一个问题哈。为什么“堆”我们叫他“托管堆”;而“栈”我们又叫“线程栈”??给变量分配内存的时候,有2种分配方式,所以也产生2中回收方式
大变量分配在堆上,由于CRL有垃圾回收功能,所以我们就不用手动释放内存,因为不用我们打理了,就如被托管了一样~
栈是另外一种方式,在底层,是的~底层~等我炫耀一下我的底层知识
在一函数中,参数还有函数中的变量,会逐一被压入栈中,等函数运行完毕就必须平衡栈
对栈使用的内存进行释放。
如果栈中的参数或变量是int bool这种值类型,那么出栈的时候立刻被释放掉
如果栈中的参数或变量引用类型,那么他们出栈的时候不是立刻被回收,只是失去了引用
等CRL这个托儿所来回收分配在栈上的内存(值类型)由线程自己回收(线程平衡栈的时候) 所以叫线程栈
分配在堆上的内存有CRL来回收 所以叫托管堆http://www.cnblogs.com/fantiantian/archive/2012/05/29/2520673.html