【问题标题】:Accessing Internal field of nested class from different AppDomain从不同的 AppDomain 访问嵌套类的内部字段
【发布时间】:2016-06-09 16:49:32
【问题描述】:

这个问题的范围相当简单,归结为以下设置:

public class B : MarshalByRefObject {
    public A a;
    public class A : MarshalByRefObject {
        internal int c;
        public int d;
    }
}

我在一个 AppDomain 中有一个 B 实例,并在另一个 appdomain 中引用了 A。但是,我无法通过调用 B.a.c 从 B 引用 c;如果我这样做了,我会收到一个远程处理异常“远程处理在类型 A 上找不到字段 c”。不过,我可以通过调用 B.a.d 来访问 d。有没有办法在不诉诸反射的情况下获得 c,或者这仅仅是使用 AppDomains 的结果?

有趣的是,当我在 Mono 4.2.3 中运行代码时,我没有遇到任何异常。我只有在 Windows 上才有问题,可能是由于 CAS。

【问题讨论】:

    标签: c# .net appdomain


    【解决方案1】:

    来自 MSDN:

    内部类型或成员只能在同一程序集中的文件中访问

    由于远程处理涉及创建从客户端到包含远程对象的程序集的引用,因此内部成员对客户端类库不可见。如果不借助反射或动态与反射的结合,您将无法绕过访问内部成员。

    【讨论】:

    • 想了很多,谢谢。最终重构代码以避免这种情况
    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 2012-01-17
    • 2014-10-30
    • 2016-09-08
    • 2021-03-13
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多