这个问题在范围上相当简单,归结为以下设置:
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;如果我这样做,我得到一个远程感知“Remoting无法在A类上找到字段c”。不过我可以通过调用B.a.d来访问d。有没有办法获得c而不诉诸于反思,或者这只是使用AppDomains的结果?
有趣的是,当我在Mono 4.2.3中运行代码时,我没有例外。只有在窗口上我才有问题,可能是由于CAS。
答案 0 :(得分:1)
来自MSDN:
内部类型或成员只能在同一程序集中的文件中访问
由于远程处理涉及从客户端创建对包含远程对象的程序集的引用,因此内部成员对您的客户端类库不可见。如果不采用反思或动态和反思的结合,你就不会绕过内部成员。