C#中句柄的问题,到现在还不是很明白,谁能用比较通俗的语言说一下,谢谢!

 我来答
shark_1980
2012-10-23 · TA获得超过4925个赞
知道小有建树答主
回答量:1096
采纳率:100%
帮助的人:407万
展开全部
句柄(HANDLE)不是C#中的概念,而是win32 API中的。
C#中常通过DllImport的的方式获取窗体或其它对象的句柄。

句柄可以理解为用于标识内存中的一个“资源”,这些资源如:文件(file)、内存块(block of memory)、菜单(menu)、控件(control)、窗体(window)等等。操作系统通过句柄来定位核心对象和系统资源。

有些人会认为句柄就是指针,其实句柄与C/C++中的指针是完全不同的两个概念。句柄仅仅是一个32位整数,在WIN32中用于管理某个系统或进程的对象,可以理解为对象的“索引”(相当于公民的身份证(ID)一样,一个身份证标识唯一一个对象),这个索引更像是一种映射关系(从句柄到对象指针的映射),而不是纯粹意义上的“指向对象的地址”。

而指针则要相对直观一些,它直接对应着一个数据在内存中的地址,得到了指针就可以自由地修改该地址中的数据。Windows系统为了安全起见,并不希望普通程序轻易修改其内部数据结构,所以Windows给每个使用GlobalAlloc等函数声明的内存区域注册登记一个句柄,平时你只是在调用API函数时利用这个句柄间接访问某个内存区域。
411129362
2012-10-23 · TA获得超过4189个赞
知道小有建树答主
回答量:822
采纳率:0%
帮助的人:980万
展开全部
句柄是Windows系统中的一个概念,是一种唯一标识的机制,这么给你举个例子吧。
你去超市时,携带有东西,就需要把东西寄存在超市,这时,服务员会给你一个号牌,把你的包放在里面,购物结束时,你把号牌还给服务员,取回你的包。

这个“号牌”就和句柄有非常相似的地方:
1,它用来唯一标识你的物品;句柄用来唯一标识一个被装入内存的“资源”,任何相对独立的东西被装入内存时,都会被分配一个句柄;

2,你不需要关心这个“号牌”的值究竟是多少,你只需要将它交还服务员,服务员会替你找到你的包;同理,你不需要关心系统给你分配的“句柄”究竟是多少,你只需要把它保存下来,需要时,将“句柄”传给需要的函数,系统就会替你找到句柄标识的“资源”;
3,不同的时候去超市,服务员给你分配的“号牌”是不同的;同理,不同的时候运行同一个程序,系统分配的“句柄”也是不同的(当然,也有一些例外,系统每次都会在固定的位置装载一些自身的特定程序,比如“桌面”,类似于超市的“内部专柜”);

4,在你不用“号牌”的时候,你需要将它交还服务员,也就是“释放”,以供别人使用;同理,在不再使用句柄的时候,需要调用CloseHandle关闭打开的句柄,当然,在C#中不用担心这个问题,这个过程会自动完成;
5,扩展一点说,“句柄”在数值上等于“资源”被装入内存的始地址,前面已经说过,它的值是多少,并没有多大的意义,只是方便你理解。这一点也和“号牌”很相似,号牌在数值上等于柜子的开始位置。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
backBp
2012-10-23 · 超过18用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:52.3万
展开全部
一个人总得需要一个简单一点的名字,方便别人称呼啊,一个地方也总得有个地址方便大家说啊,多吧
你就这样理解好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式