除了应用System.Serializable的Attribute的类型外,继承自System.MarshalByRefObject的类型也可以为对象提供跨越应用程序域边界的访问能力。但是,这样的访问是通过传引用(by Reference)而非传值(by value)来进行的。假设我们在一个应用程序域中创建了一个对象(其类型继承自System.MarshalByRefObject)。当该对象的引用被传递给一个目的应用程序域时,CLR实际上会在目的应用程序域中创建一个代理类型的实例,目的应用程序域中的代码将使用这个代理对象引用。原来的对象及其字段仍然驻留在原来的应用程序域中。代理对象实际上是一个封装器(wrapper),它知道怎样调用原来应用程序域中的对象上的实例方法。同样,目的应用程序域不会直接访问原来应用程序域中的对象。