什么是句柄什么是句柄对象

对象(object):

是一件事、一个实体、一个名词,可以获得的东西,可以想象有自己的标识的任何东西。对象是类的实例化。一些对象是活的,一些对象不是。比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。 概括来说就是:万物皆对象。

 

句柄是:

一个标识符,是拿来标识对象或者项目的。它就像我们的车牌号一样,每一辆注册过的车都会有一个确定的号码,不同的车号码各不相同,但是也可能会在不同的时期出现两辆号码相同的车,只不过它们不会同时处于使用之中罢了

 

对象句柄 就是一个对象变量。

    每种编程语言都有自己的数据处理方式。有些时候,程序员必须时刻留意准备处理的是什么类型。您曾利用一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C或C++里的指针)?
所有这些在Java里都得到了简化,任何东西都可看作对象。因此,我们可采用一种统一的语法,任何地方均可照搬不误。但要注意,尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”(Handle)。在其他Java参考书里,还可看到有的人将其称作一个“引用”,甚至一个“指针”。可将这一情形想象成用遥控板(句柄)操纵电视机(对象)。只要握住这个遥控板,就相当于掌握了与电视机连接的通道。但一旦需要“换频道”或者“关小声音”,我们实际操纵的是遥控板(句柄),再由遥控板自己操纵电视机(对象)。如果要在房间里四处走走,并想保持对电视机的控制,那么手上拿着的是遥控板,而非电视机。
此外,即使没有电视机,遥控板亦可独立存在。也就是说,只是由于拥有一个句柄,并不表示必须有一个对象同它连接。所以如果想容纳一个词或句子,可创建一个String句柄:
String s;
但这里创建的只是句柄,并不是对象。若此时向s发送一条消息,就会获得一个错误(运行期)。这是由于s实际并未与任何东西连接(即“没有电视机”)。因此,一种更安全的做法是:创建一个句柄时,记住无论如何都进行初始化:
String s = "asdf";
然而,这里采用的是一种特殊类型:字串可用加引号的文字初始化。通常,必须为对象使用一种更通用的初始化类型。

 

在C#中,句柄(Handle)是一个引用或指针,用于表示对托管对象或非托管资源的引用。句柄可以被用于与底层系统交互、管理资源、进行跨 AppDomain 或进程通信等操作。 在C#中,使用句柄可以通过以下方式进行: 1. 托管句柄(Managed Handle):这是对.NET对象的引用,由CLR(Common Language Runtime)进行管理和释放。在C#中,托管句柄的创建和使用是自动的,开发者无需手动管理托管句柄的生命周期。 2. 非托管句柄(Unmanaged Handle):这是对非托管资源(如操作系统提供的资源)的引用。在C#中,可以使用`IntPtr`类型表示非托管句柄。通过调用外部API函数或使用`Marshal`类中的方法,可以获取或创建非托管句柄,并进行相关操作。 以下是使用非托管句柄的一个简单示例: ```csharp using System; using System.Runtime.InteropServices; class Program { // 假设有一个外部API函数,返回一个非托管句柄 [DllImport("mylibrary.dll")] private static extern IntPtr GetHandle(); static void Main() { IntPtr handle = GetHandle(); // 调用一些需要使用句柄的操作 DoSomethingWithHandle(handle); // 释放非托管句柄 ReleaseHandle(handle); } static void DoSomethingWithHandle(IntPtr handle) { // 使用句柄进行一些操作 // ... } static void ReleaseHandle(IntPtr handle) { // 释放句柄的资源 // ... } } ``` 请注意,在使用非托管句柄时,需要确保正确地管理它们的生命周期,包括获取、使用和释放资源。这样可以避免资源泄漏和潜在的安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值