gpt4 book ai didi

c# - 如何确定可用于转换 MarshalByRefObject 的接口(interface)?

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:42 25 4
gpt4 key购买 nike

是否可以确定可用于转换 MarshalByRefObject 对象的接口(interface)?

强制转换运算符如何处理 MarshalByRefObject 对象?它调用 CreateObjRef 方法吗?

谢谢,马西莫

最佳答案

这是一个可用于检索接口(interface)列表的解决方法。

定义一个公共(public)接口(interface)IDescriptor

public interface IDescriptor
{
List<string> GetInterfaces();
}

定义一个实现接口(interface)的基类:

public class BaseMasrhalByRefObject : MasrhalByRefObject, IDescriptor
{
public BaseMasrhalByRefObject() : base() {}

public List<string> GetInterfaces()
{
List<string> types = new List<string>();
foreach(Type i in GetType().GetInterfaces())
{
types.Add(i.AssemblyQualifiedName);
}
return types;
}
}

使用 BaseMasrhalByRefObject 而不是 MasrhalByRefObject 来定义服务对象:

public class MyServiceObject : BaseMasrhalByRefObject, MyInterface1, MyInterface2, ...
{
// Add logic method
}

在AppDomain A中创建MyServiceObject的引用对象。在 AppDomain B 中获取远程对象的代理。代理可以转换为 IDescriptor:

public List<Type> GetInterfaces(MasrhalByRefObject proxy)
{
List<Type> types = new List<Type>();
IDescriptor des = proxy as IDescriptor;
if (des != null)
{
foreach(string t in des.GetInterfaces()) // this is a remote call
{
types.Add(Type.GetType(t);
}
}
return types;
}

关于c# - 如何确定可用于转换 MarshalByRefObject 的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8537315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com