我反编译了一个最初来自J#的DLL。我看到原始代码中缺少以下属性:
[JavaFlags(0)]
public ToolBarButton toolBarButtonProg;
[JavaFlags(8)]
public static int lastClass;
我看到那些JavaFlags是在以下J#名称空间中定义的。
namespace com.ms.vjsharp.cor
{
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class JavaFlags : Attribute
{
public int attr;
public JavaFlags(int attr)
{
this.attr = attr;
}
}
}
但这些属性的目的是什么?
答案 0 :(得分:3)
此属性可能由J#编译器添加,以表示未在CLR中直接表示的Java构造。例如,CLR中没有可见性修饰符,它完全反映了Java中的protected
修饰符,因此编译器会在CLR中生成public
的方法以及[JavaFlags(4)]
属性,因此在编译其他Java代码时,J#编译器知道将该方法视为protected
。