zoukankan      html  css  js  c++  java
  • Remoting与Font对象 WebIM

      Remoting与Font对象有何牵连了?这是因为System.Drawing.Font这个类型比较特殊。它既添加了[Serializable]特性,表明其支持序列化;又从MarshalByRefObject继承,表明其可以被远程Remoting引用。

    [Serializable]
    public sealed class Font : MarshalByRefObject

      假设有个TextView类型的对象中有Font类型的成员,比如像下面这样:

    [Serializable]
    public class TextView
    {
      
    private string content = "";
    public string Content
    {
    get { return content; }
    set { content = value; }
    }
        private Font font = new Font("宋体", 9); 
    public Font Font
    {
    get { return font; }
    set { font = value; }
      }
     }

      TextView是标记为[Serializable]特性而没有从MarshalByRefObject继承,表明其可以被序列化传递而不能被远程Remoting引用。

      

      好,现在问题来了,假设有个Remoting接口可以获取TextView对象:

    public interface IViewGetter
    {
      TextView GetTextView(
    intviewID);
    }

      当我得到IViewGetter接口的远程引用,并调用其GetTextView方法时,返回的TextView对象中的font成员是指向一个本地对象了?还是这个font成员本身就是一个remoting引用?

      经过我的测试,此时font成员是一个remoting引用,它是服务器上真实的Font对象的一个代理而已。

      很多时候,这并不是我们所期望的,毕竟,我们只是想得到一个“纯的”本地的TextView对象,那么如何解决这个问题了?我的方法是这样的 -- 修改IViewGetter接口的GetTextView方法,让其返回TextView对象序列化后得到是字节数组,即这样:

    public interface IViewGetter
    {
      byte[] GetTextView(
    intviewID);
    }

      客户端调用GetTextView方法得到结果后,将其反序列化为TextView对象,如此客户端得到的就是一个“纯的”本地的TextView对象了。这种方案是可行的,只是使得接口方法的定义变得不那么直观了。还有更好的办法吗?欢迎留言。

  • 相关阅读:
    ryu 下发流表配置
    openstack kolla 部署---不同的节点采用不同的物理接口
    kolla 安装
    Ubuntu add-apt-repository: command not found
    大前端发展趋势
    这些优化技巧可以避免我们在 JS 中过多的使用 IF 语句
    asap异步执行实现原理
    为什么 JS 对象内部属性遍历的顺序乱了
    你可能忽略的 async/await 问题
    深入浅出JS原型链
  • 原文地址:https://www.cnblogs.com/components/p/1814712.html
Copyright © 2011-2022 走看看