谁能给我解释清楚什么是托管? 我给100分

fengzi_zhu 2003-03-19 08:33:52
谁能给我解释清楚什么是托管? 我给100分。要说详细,用自己的话说,不要书上的概念
...全文
61 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengzi_zhu 2003-03-21
  • 打赏
  • 举报
回复
恩.这下清楚了许多,归跟结底是本人没上过托儿所,所以难以理解这个概念.哈哈...

上面各位小朋友真幸福...羡慕ing~~~~~~
gogogo 2003-03-19
  • 打赏
  • 举报
回复
win32c(咖啡+C#) 是牛人啊
win32c 2003-03-19
  • 打赏
  • 举报
回复
记得你小时候上幼子院,这就是托管(获得幼儿院的服务)
好处:
得到安全保障;
可以和别的小朋友玩(语言相互调用,不托管就没有);
……
有的家里忙就必须托管了(C#、VB……);
有的家里有人照顾就可以不托管(C++);

定义:
托管代码是为面向公共语言运行库的服务编写的代码(请参阅“什么是公共语言运行库?”)。为了面向这些服务,该代码必须向运行库提供最低级别的信息(元数据)。默认情况下,所有 C#、Visual Basic .NET 和 JScript .NET 代码都受托管。默认情况下,Visual Studio .NET C++ 代码不受托管,但编译器可以通过指定命令行开关 (/CLR) 来产生托管代码。

与托管代码密切相关的是托管数据(由公共语言运行库的垃圾回收器分配和释放的数据)。默认情况下,C#、Visual Basic 和 JScript .NET 数据受托管。然而,通过使用特殊的关键字可以将 C# 数据标记为非托管。默认情况下,Visual Studio .NET C++ 数据不受托管(即使在使用 /CLR 开关时),但在使用 C++ 托管扩展时,可以通过使用 __gc 关键字将类标记为托管。正如名称所暗示的,这意味着用于类实例的内存受垃圾回收器的托管。另外,类成为 .NET 框架社区的一名完全参与的成员,这既带来了好处,也带来了限制。其中一个好处是与用其他语言编写的类的正确互操作性(例如,托管 C++ 类可以从 Visual Basic 类继承)。其中一个限制是托管类只能从基类继承。

yarshray 2003-03-19
  • 打赏
  • 举报
回复
fengzi_zhu(疯子)

也不能完全说garbage是个概念,C#中用GC就是

和JAVA 的VM一样,CLR就是C#及所有.NET编程语言的VM

简单的就这么理解.
chantree 2003-03-19
  • 打赏
  • 举报
回复
用.NET Framework 编写的代码在执行(runtime)时是托管的,即CLR管理着应用程序。方式是管理内存,处理安全性,以及允许进行跨语言调试等。C#中,只能编写在托管环境下运行的代码,让。NET自己与操作系统进行交互。不在CLR控制下运行的应用程序是非托管的,如用C++编写的访问操作系统的低级功能。
fengzi_zhu 2003-03-19
  • 打赏
  • 举报
回复
就是JAVA里的garbage吗? 好象C sharp里还有个garbage的概念啊?
lufly2000 2003-03-19
  • 打赏
  • 举报
回复
关注
herofyf 2003-03-19
  • 打赏
  • 举报
回复
托管很好理解!抽象一点讲就是一些功能你不要自己去实现,而是由clr去实现,由它(clr)去管理.比如指针空间:在vc中你用new 生成,而必须用delete去删除。但在c#中你不要管对象回收,也就是你用new生成对象,但你不必自己删除对象,删除相应不用的对象由clr去完成。
do you understand!
banping 2003-03-19
  • 打赏
  • 举报
回复
有点不同意见??好像.net程序都在clr下运行吧?
我的理解有点像指针!
可能也不太对!
abkn 2003-03-19
  • 打赏
  • 举报
回复
CLR是啥东西?---菜鸟借问
myqiao 2003-03-19
  • 打赏
  • 举报
回复
同意楼上的。。
5drush 2003-03-19
  • 打赏
  • 举报
回复
托管的英文是Managed,意思就是被管理的,也就是在CLR的控制之下运行的程序。
我也不知道理解得对不对,反正我就是这么理解的。
glen 2003-03-19
  • 打赏
  • 举报
回复
童年的生活,到处都需要妈妈的呵护,我在托管的环境中成长。
长大了,我有了自已追求,在非托管的环境中任意驰程!
-----------------------------------------------
需要.NET Framework支持才能运行的代码就是托管代码,反之为非托管代码.

using C#,铸造百年树人!----青松
甴曱 2003-03-19
  • 打赏
  • 举报
回复
同意,win32c(咖啡+C#) 的看法
amylqt 2003-03-19
  • 打赏
  • 举报
回复
公共语言运行库,.NET 框架提供了一个称为公共语言运行库的运行时环境,它管理代码的执行并提供使开发过程更轻松的服务。
编译器和工具公开运行库的功能并使您能够编写受益于此托管执行环境的代码。使用针对运行库的语言编译器开发的代码称为托管代码;它受益于跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等诸多功能。

若要使运行库能够向托管代码提供服务,语言编译器必须发出对代码中的类型、成员和引用进行描述的元数据。元数据与代码一起存储;每个可加载的公共语言运行库可移植可执行 (PE) 文件都包含元数据。运行库使用元数据查找和加载类、在内存中对实例进行布局、解析方法调用、生成本机代码、强制安全性以及设置运行时上下文边界。

运行库自动处理对象布局和管理对对象的引用,当不再使用对象时释放它们。其生存期以这种方式来管理的对象称为托管数据。自动内存管理消除了内存泄漏以及其他一些常见的编程错误。如果代码是托管的,则可以在 .NET 框架应用程序中使用托管数据、非托管数据或者使用这两者。由于语言编译器提供它们自己的类型(如基元类型),因此可能并不总是知道(或需要知道)数据是否是托管的。

公共语言运行库使设计其对象能够跨语言交互的组件和应用程序变得很容易。用不同语言编写的对象可以互相通讯,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生类或调用原始类的方法。还可以将类的实例传递到用不同的语言编写的类的方法。这种跨语言集成之所以成为可能,是因为针对运行库的语言编译器和工具使用由运行库定义的通用类型系统,而且它们遵循运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。

所有托管组件都携带有关生成所基于的组件和资源的信息,作为其元数据的一部分。运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这使代码不太可能由于某些未满足的依赖项而中断。注册信息和状态数据不再保存在注册表(在注册表中建立和维护它们会很困难)中。相反,有关您定义的类型(和它们的依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。

语言编译器和工具以对它们的开发人员来说有用和直观的方式公开运行库的功能。这意味着运行库的某些功能可能在一个环境中比在另一个环境中更引人注意。您对运行库的体验取决于您使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到有了公共语言运行库,Visual Basic 语言的面向对象的功能比以前多了。您可能会对运行库的下列优点特别感兴趣:

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧