正确理解Handle对象

上古时期的程序员, 确定都知道Handle对象, 通常中文翻译成句柄. 通常的Handle在实现上, 都是一个整数, 而这个整数能够理解为一个指针, 指针指向的地址呢, 又保存了另一个指针. 之因此这么搞, 是由于这样搞可让真实的对象能够挪动.程序员

考虑一个一个对象A, 保存在Handle里面, 因为某种缘由, 我须要把这个对象A从原来的位置移走, 那么移走以后的对象叫对象B, 那我只须要修改一下Handle里面的指针, 就能够保证正确性, 而后在用户看来, 仍是同一个对象, 由于Handle没有改变.编程

正是由于Handle这种特性, 因此能够基于Handle作一个GC系统. miloyip翻译的那本游戏编程的书里面也讲过, 以前在主机上有人用Handle来管理内存.服务器

而我这篇文章想说的是, Handle这种特性其实还能够用在跟UI有关系的系统里面. 试想一个游戏客户端和服务器要频繁打交道, 而后C#这种引用语意的语言中, 不少程序员都会在UI层保存一个Entity对象, 因为一些缘由, 会致使整个系统内部会出现两个Entity对象, 其ID同样.编码

你能够说这是因为程序员的编码不正确, 我也确信这一点. 可是咱们要从根本层面上解决这个问题, 而不是把这个问题推卸给人.翻译

因为咱们知道Handle可让咱们把对象挪动, 那么咱们也只须要在C#造这样一个东西就好了. 这样在使用的时候, 只让程序员用Handle<T>来操做T这个类型的Entity对象. 那么系统内部, 就只会有一个Entity.指针

PS:code

通常好比文件描述符/文件都是一个Handle, 跟OS打交道的硬件资源, 通常都是Handle.对象

Linux下, 一个thread_t也是句柄~~游戏

再好比, Sun之前实现的JVM, 一个reference也是一个Handle.ip

相关文章
相关标签/搜索